[英]How does a recursive function to find the minimum element of an array work?
我有这种使用递归查找数组最小值的方法,我现在正在学习。
public class findMin {
private static int findMin(int[] data, int index) {
int min;
if (index == data.length - 1)//base case
return data[index];
min = findMin(data, index + 1);
if (min < data[index])
return min;
else
return data[index];
}
}
例如,我的数组是int[] numbers = {3, 15, 1, 9, 6, 12, 21, 17, 4};
然后从索引0开始搜索
我的问题是该方法如何抛出整个数组? 我可以看到它检查了一下,但不是应该循环抛出整个数组吗?
您正在谈论两种选择
使用循环时,您会遇到类似
{initial data}
for({initial state} ; {stop condition} ; {incrementation} }
使用递归时,您会执行类似的操作。
// call the function the first time
method({initial data}, {initial state});
// inside the method it checks the condition
if ({condition})
return {result}
else
method({data}, {incrementation});
而且,如果您认为使递归看起来不必要地复杂且效率低下,那是因为Java基于过程语言,后者倾向于循环,而不是功能语言。 在函数式语言中,通常情况下递归更为优雅,而循环则相对困难。
我的问题是方法如何抛出整个数组?
每次该方法自身调用时,它都会递增索引,并且条件检查会在最后停止。
我可以看到它检查但它不应该处于循环中以抛出整个araay吗?
我不认为循环是解决问题的唯一方法。
注意:当有效支持递归时,尾递归优化可以将递归变成一个循环。 不幸的是,JVM没有这种优化。
在行中
min = findMin(data, index + 1);
该方法会自行调用。 这使得该方法实质上遍历了数组,因为每次该方法自身调用时,索引都会增加一个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.