为什么在这段递归代码中执行 println?

Why println is being executed in this recursive piece of code?

在这段代码中,arrLength 从 4 开始,然后一直递减直到达到零。 在它达到零的那一刻,它不应该再执行 if 块内的内容。 但实际情况是,当它达到零时,它仍然执行 println 行。 不了解该 println 行是如何执行的,因为该行位于 if 块内,并且当 arrLength 变为零时,if 块内的任何内容都不应执行。 最后它打印 5, 6, 2, 1 而在我的理解中它应该不打印任何东西永远不会执行 println 行。

class ArrayElements{
 
    public void printElements(int arr[], int arrLength){
        if(arrLength != 0){
            arrLength--;
            printElements(arr, arrLength);
            System.out.println(arr[arrLength]);
        }
    }
}
public class Main {
 
    public static void main(String[] args) {
        int arr[] = {5,6,2,1};
        int arrLength = arr.length;
 
        ArrayElements mv = new ArrayElements();
        mv.printElements(arr, arrLength );
    }
}

了解正在发生的事情的一种简单方法是像这样修改您的 printElements 方法:

public void printElements(int arr[], int arrLength){
    System.out.println("arrLength value is " + arrLength);
    if(arrLength != 0){
        arrLength--;
        printElements(arr, arrLength);
        System.out.println(arr[arrLength]);
    }
}

输出将是:

arrLength value is 4
arrLength value is 3
arrLength value is 2
arrLength value is 1
arrLength value is 0
5
6
2
1

如您所见,您进行了 5 次递归调用,但只打印了 4 个值。原因是当 arrLength 等于 0 时,第二个 println 没有被执行。

这意味着当arrLength为0时不进入if条件