繁体   English   中英

为什么在这段递归代码中执行 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]);
    }
}

output 将是:

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 条件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM