Java 递归函数如何查找数组的最小元素?
我有一个关于使用递归求数组最小值的方法,我现在正在学习这个方法Java 递归函数如何查找数组的最小元素?,java,arrays,recursion,Java,Arrays,Recursion,我有一个关于使用递归求数组最小值的方法,我现在正在学习这个方法 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
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];
}
}
公共类findMin{
私有静态int findMin(int[]数据,int索引){
int-min;
if(index==data.length-1)//基本大小写
返回数据[索引];
min=findMin(数据,索引+1);
如果(最小值<数据[索引])
返回最小值;
其他的
返回数据[索引];
}
}
例如,我的数组是int[]numbers={3,15,1,9,6,12,21,17,4}代码>和我从索引0中搜索
我的问题是该方法如何抛出整个数组?我可以看到它进行了检查,但它不应该在一个循环中抛出整个阵列吗?在队列中
min = findMin(data, index + 1);
该方法调用自身。这使得该方法基本上在数组中循环,因为每次该方法调用自身时,它都会将索引增加1。您有两个选择
- 使用循环遍历数组
- 使用递归的方式是访问数组的每个元素而不使用循环
当你使用一个循环时,你会有
{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基于过程语言,它更喜欢循环,而不是函数语言。在函数式语言中,递归更优雅,循环相对困难
我的问题是mehod是如何抛出整个阵列的
每次该方法调用自身时,它都会增加索引,并在结束时停止条件检查
我可以看到它在检查,但它不应该在一个循环中去扔整个Aray吗
我不认为循环是解决问题的唯一方法
注意:当递归得到有效支持时,尾部递归优化可以将递归变成循环。不幸的是,JVM没有这种优化功能。Captain显然有帮助。xdaddaSystem.out.println(“用索引调用findMin”+index)方法开头的代码>。在方法末尾添加类似的跟踪。然后执行并查看输出。或者使用调试器逐行遍历代码,并逐步执行对findMin()的每个调用。也就是说,我想知道如果您不了解该方法的工作原理,您是如何编写该方法的。findMin会被反复(递归)调用。方法的每次调用都会处理数组的一个元素。elias询问的是特定的代码,而不是如何在数组中循环。