我用Java编写了这个代码来计算数组中的字符数。但是,我没有使用递归。有人可以将其重写为递归吗?
如何转换for loop
和count++
?
public int count(char[] arr, char ch) {
if (arr == null) {
return -1;
}
int count = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] == ch) {
count++;
}
}
return count;
}
答案 0 :(得分:2)
不是通过循环迭代,而是为了递归,你编写的函数必须自己调用(因此你需要第三个参数,这是你在数组中的当前位置)。
你只需从索引0开始,如果当前字符不是你的字符则返回0,如果是,则返回1。然后,您必须对数组的其余部分执行相同的操作。到达末尾(currIndex == arr.length
)时,返回0作为求和的起始值。
public static void main (final String[] args) {
char[] foo = {'f', 'o', 'o', 'b', 'a', 'r'};
System.out.println (count (foo, 'o')); // 2
System.out.println (countRecursive (foo, 'o')); // 2
}
public static int countRecursive (final char[] arr,
final char ch) {
return countRecursive (arr, ch, 0);
}
public static int countRecursive (final char[] arr,
final char ch,
final int currIndex) {
if (currIndex == arr.length) {
return 0;
} else {
return (arr[currIndex] == ch ? 1 : 0) + countRecursive (arr, ch, currIndex + 1);
}
}
答案 1 :(得分:0)
public int count(char[] arr, char ch) {
if (arr == null || arr.length ==0) {
return 0;
}
char[] oneSmallerArr = new char[arr.length-1];
System.arraycopy(arr, 1, oneSmallerArr, 0, oneSmallerArr.length);
return (arr[0] == ch ? 1 : 0) + count(oneSmallerArr, ch);
}