Java最大函数递归
我不熟悉递归,你能告诉我为什么这个函数的输出是=3吗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
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)在2个if
s之间进行code>并删除对该方法的另一个调用。