我试图以递归方式编写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"));
}
答案 0 :(得分:1)
一种更简单的方法就是一次又一次地缩小字符串。
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));
}
答案 1 :(得分: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"));
}
我认为你这样做是为了教导自己递归 - 如果没有,你可能想要想一下,使用迭代方法而不是递归是否更好。
答案 2 :(得分:0)
变量numValue
的类型为int
。所以它在调用方法中没有改变,你将它传递给另一个方法并在那里进行更改。这意味着,行count(numValue, i=i+1, word);
基本上什么都不做。
您可以通过返回递归调用的结果来更正方法(因为您在if
中返回,不需要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);
}
这就是为什么你的功能无法正常工作的原因。蒂姆劳提供的答案是一种更好的递归解决方案。