java在这个递归程序中,这段代码发生了什么变化?
我正在做一项作业,我在这里得到了帮助,我需要一段代码。这个程序运行得很好,但有一部分我不明白
public class largest_in_array
{
public static void main(String[] args)
{
int array [] = {23,35,67,76,34};
System.out.println("The largest number in the array is: ");
System.out.println(array[largest(array, 0, 0)]);
}
public static int largest(int array[], int maxIndex, int i)
{
int ans = 0;
if(i == array.length-1)
{
ans = maxIndex;
}
else
{
ans = largest(array, (Math.max(array[maxIndex], array[i]) == array[maxIndex]) ? maxIndex : i, ++i);
}
return ans;
}
}
我不明白的是:
ans = largest(array, (Math.max(array[maxIndex], array[i]) == array[maxIndex]) ? maxIndex : i, ++i);
似乎maxIndex从0开始,然后在第三个递归步骤前后,它获得值1。我不知道这是怎么发生的,因为maxIndex似乎在代码中的任何地方都不会递增
如果我的问题事先让人困惑,我道歉。对此的任何解释都将不胜感激
# 1 楼答案
这是一个递归函数,所以它每次都调用自己。调用函数时,会为函数的参数创建新变量,并为其分配参数值。也就是说,如果您有一个函数:
你这样称呼它:
然后创建一个新变量
x
(在调用堆栈上),并为其赋值3
递归调用中也会发生同样的情况。因此,如果某个函数调用自身:
然后在每次调用时创建一个名为
x
的新变量,并为其赋值x+1
。也就是说,每次调用时,参数值都比以前高一个代码中也会发生同样的情况。在每次递归调用中,都会在堆栈上创建一组新的参数,并从函数调用的参数中为它们赋值。也就是说,在每个递归调用上都执行以下赋值:
因此,在每个递归上
maxIndex
被分配一个新值