给定一个数组data [],我的目标是找到后跟double的元素个数。 (如果它是一个简单的for循环,它看起来像这样)
for(int i = 0; i < data.length - 1; i ++) {
if(data[i]*2 == data[i+1]) {
count++;
}
}
然而,我的问题是递归地找到代码的某一部分,如问号所示。我无法确定如何将前一个方法调用中找到的值与当前方法调用进行比较。
public int allDoubles(int[] data) {
int count = 0;
//return the total doubles found
return doubleFinder(data, 0, data.length, count);
}
private int doubleFinder(int data[], int low, int high, int count) {
if (low == high) {
return 0;
} else { // low < high
if( ?(previous value == current value)? ) {
count++;
}
doubleFinder(data, low, high -1, count);
}
return count;
}
答案 0 :(得分:1)
您没有将计算结果传递回调用方法。由于java是按值调用的,因此不会起作用。您也会将错误的值传递给doubleFinder
中的allDoubles
:您应该使用(data, 0, data.length-1, count)
代替(data, 0, data.length, count)
。
您的方法可以像这样修复:
private int doubleFinder(int data[], int low, int high, int count) {
if (low == high) {
return count;
} else { // low < high
if(data[high-1]*2 == data[high]) {
count++;
}
// pass the count from the base case to calling method
return doubleFinder(data, low, high -1, count);
}
}
但你甚至可以删除count
:
private int doubleFinder(int data[], int low, int high) {
if (low == high) {
// just 1 value
return 0;
} else if (data[low]*2 == data[low+1]) {
// 1 "double" found -> add 1
return 1 + doubleFinder(data, low+1, high);
} else {
return doubleFinder(data, low+1, high);
}
}
答案 1 :(得分:0)
以下是doubleFinder()
的实现,它以递归方式比较data[i] == 2*data[i-i]
,从输入数组data
中的最高索引开始。它找到的每个double(不是类型)计数为1,并返回输入的输入的双精度总数。
private int doubleFinder(int data[], int index) {
if (index <= 0) {
return 0; // reached last number in array 'data'
} else {
if (data[index] == 2*data[index-1])
return doubleFinder(data, index-1) + 1;
else {
doubleFinder(data, index-1)
}
}
}