簡體   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