[英]How should I write this Java function recursively?
我正在嘗試遞歸編寫以下Java代碼:
public static int count(String word) {
int numValue = 0;
int length = word.length();
for(int i=0; i<length; i++){
String alpha = "abcdefghijklmnopqrstuvwxyz";
String letter = (word.substring(0 + i,1 + i));
numValue = numValue + alpha.indexOf(letter) + 1;
}
return numValue;
}
public static void main(String[] args) {
System.out.println(count("abc"));
}
該函數返回輸入字符串參數中每個字母的索引總和。
我正在嘗試遞歸地編寫相同的代碼,有人可以指出我哪里出錯了嗎?
public static int count(int numValue, int i, String word) {
String alpha = "abcdefghijklmnopqrstuvwxyz";
if( i >= word.length()){
return numValue;
}
else{
String letter = (word.substring(0 + i,1 + i));
numValue = numValue + alpha.indexOf(letter) + 1;
count(numValue, i=i+1, word);
}
return numValue;
}
public static void main(String[] args) {
System.out.println(count(0,0, "abc"));
}
一個更簡單的方法是一次又一次地收縮字符串。
public static int count(String word) {
if (word.isEmpty()) {
return 0;
}
final String alpha = "abcdefghijklmnopqrstuvwxyz";
return alpha.indexOf(word.charAt(0)) + count(word.substring(1));
}
要將此函數更改為遞歸,最好使用分而治之的方法,該方法很容易實現。 我將以簡單詳細的方式進行介紹,以便您可以清楚地看到這些步驟。
public static int count(String word) {
int numValue = 0;
int length = word.length();
if(length > 1)
{
String substring1 = word.substring(0, length/2);
String substring2 = word.subtring(length/2 + 1, length);
numValue += count(substring1);
numValue += count(substring2);
return numValue;
}
else
{
String alpha = "abcdefghijklmnopqrstuvwxyz";
return alpha.indexOf(word) + 1;
}
}
public static void main(String[] args) {
System.out.println(count("abc"));
}
我想您正在這樣做,目的是要教自己遞歸-如果不是,您可能想考慮僅使用迭代方法而不是遞歸對您是否更好。
變量numValue
的類型為int
。 因此,它不會在調用方法中更改,而是將其傳遞給另一個方法並在那里進行更改。 這意味着,行count(numValue, i=i+1, word);
基本上什么也沒做。
您可以通過返回遞歸調用的結果來更正該方法(因為您返回了if
, else
不需要else
):
public static int count(int numValue, int i, String word) {
String alpha = "abcdefghijklmnopqrstuvwxyz";
if( i >= word.length()){
return numValue;
}
String letter = (word.substring(0 + i,1 + i));
numValue = numValue + alpha.indexOf(letter) + 1;
return count(numValue, i=i+1, word);
}
這就是為什么您的功能無法正常工作的原因。 timrau提供的答案是一個更好的遞歸解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.