Java最大函数递归

Java最大函数递归,java,function,loops,recursion,max,Java,Function,Loops,Recursion,Max,我不熟悉递归,你能告诉我为什么这个函数的输出是=3吗 public class Rekursion2 { public static void main(String[] args) { int[] arr = {6,1,2,3,1,100,76}; System.out.println(maximum(arr,3)); } static int maximum(int[] arr, int i) { int max = 0

我不熟悉递归,你能告诉我为什么这个函数的输出是=3吗

public class Rekursion2 {
    public static void main(String[] args) {
        int[] arr = {6,1,2,3,1,100,76};
        System.out.println(maximum(arr,3));
    }
    static int maximum(int[] arr, int i) {
        int max = 0;
        if(i < 0 || i > arr.length) {
            return max;
        }
        if(arr[i] > max) max=arr[i];
        maximum(arr, i-1);
        return max;
    }
}
public class-rekurasion2{
公共静态void main(字符串[]args){
int[]arr={6,1,2,3,1100,76};
系统输出打印项数(最大值(arr,3));
}
静态整数最大值(整数[]arr,整数i){
int max=0;
if(i<0 | | i>arr.length){
返回最大值;
}
如果(arr[i]>max)max=arr[i];
最大值(arr,i-1);
返回最大值;
}
}

执行索引为
3
最大值

3
位于数组的边界内,因此该方法不会在此点停止

arr[3]
3
(第四个元素),它比
max
(0)大,因此
max
将被分配给
3

在此之后,将递归调用该方法,但它不会更改任何内容(您不会对返回值执行任何操作)


最后,返回max
(3)。

为什么输出不是3?调用集
i=3
max
纯粹是函数框架的局部调用,因此函数只返回
0
a[i]
中的较大值。递归调用没有做任何事情,因为没有使用结果。这是一个糟糕的递归用例——查找最大值应该以较少的开销迭代完成,并且不会破坏调用堆栈。顺便说一句,欢迎来到SO!教您使用设置为
int max=0
的断点调试代码,并逐步执行,而不是告诉您,这样您就可以看到每个执行点上所有变量的状态。这应该可以合理地解释为什么它返回
3
。并且不要设置
max=0
,如果数组中的最大值为负数,这将不起作用。实际上递归在这里什么都不做(只是花费时间和内存)由于
max
的值不会因后续调用
max
而改变-如果删除
max(arr,i-1)
语句,您将得到与我现在得到的结果相同的结果,您将如何使用递归和不使用max函数来实现这一点?只需放置
max=max(arr,i-1)if
s之间进行code>并删除对该方法的另一个调用。