有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    这是一个递归函数,所以它每次都调用自己。调用函数时,会为函数的参数创建新变量,并为其分配参数值。也就是说,如果您有一个函数:

    int someFunction(int x)
    {
        // do something with x
    }
    

    你这样称呼它:

    someFunction(3)
    

    然后创建一个新变量x(在调用堆栈上),并为其赋值3

    递归调用中也会发生同样的情况。因此,如果某个函数调用自身:

    int someFunction(int x)
    {
        if (x < 10) {
            someFunction(x+1);
        }
    }
    

    然后在每次调用时创建一个名为x的新变量,并为其赋值x+1。也就是说,每次调用时,参数值都比以前高一个

    代码中也会发生同样的情况。在每次递归调用中,都会在堆栈上创建一组新的参数,并从函数调用的参数中为它们赋值。也就是说,在每个递归调用上都执行以下赋值:

    array = array
    maxIndex = (Math.max(array[maxIndex], array[i]) == array[maxIndex]) ? maxIndex : i
    i = ++i
    

    因此,在每个递归上maxIndex被分配一个新值