好的,所以我一直试图用Java包围递归,我可以完成简单的任务,例如求和,倒转等等。但我一直在努力做这个练习:
我正在尝试使用递归找到数组中的最小数字但仍然得到0.0的答案。
我对递归的理解是,我需要增加一个元素,然后提供一个结束递归的基本情况。当我必须返回一个值时,我想我搞砸了,什么时候最好调用递归方法。
这是我到目前为止所做的:
public static double findMin(double[] numbers, int startIndex, int endIndex) {
double min;
int currentIndex = startIndex++;
if (startIndex == endIndex)
return numbers[startIndex];
else {
min = numbers[startIndex];
if (min > numbers[currentIndex]) {
min = numbers[currentIndex];
findMin(numbers, currentIndex, endIndex);
}
return min;
}
} //findMin
答案 0 :(得分:5)
提示:您正在递归调用findMin
,但之后不使用其返回值。
(1)整个数组的最小值,(2)第一个元素和(3)除第一个元素之外的所有内容的最小值之间的关系是什么?
答案 1 :(得分:5)
这是一个简化版本:
public static double min(double[] elements, int index) {
if (index == elements.length - 1) {
return elements[index];
}
double val = min(elements, index + 1);
if (elements[index] < val)
return elements[index];
else
return val;
}
答案 2 :(得分:4)
此代码中存在各种问题,包括:
findMin
调用的结果。startIndex
对于findMin
的每次调用都是相同的,因为currentIndex
在 {{之前设置为startIndex
的值1}}递增。答案 3 :(得分:1)
除了第一个答案之外还有一些观察结果:
int currentIndex = startIndex++;
- 你会想念你的第一个元素。通常,您不希望修改递归函数的输入。当你准备好再次调用函数时,取消输入并生成新值 - 即'findMin(numbers,currentIndex + 1,endIndex)'