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显然有帮助。xdadda
System.out.println(“用索引调用findMin”+index)。在方法末尾添加类似的跟踪。然后执行并查看输出。或者使用调试器逐行遍历代码,并逐步执行对findMin()的每个调用。也就是说,我想知道如果您不了解该方法的工作原理,您是如何编写该方法的。findMin会被反复(递归)调用。方法的每次调用都会处理数组的一个元素。elias询问的是特定的代码,而不是如何在数组中循环。