簡體   English   中英

當我使用“n--”而不是“n-1”時,為什么會出現 stackoverflow 錯誤?

[英]When I use "n--" instead of "n-1" why do I get stackoverflow error?

在這段代碼中,它是一個遞歸打印元素 1 到 5 的程序,當我使用n--而不是n-1時,我得到一個堆棧溢出錯誤。 而當使用n-1時,代碼運行良好。 不應該n--n-1在這段代碼中工作相同嗎?

    //when using n--

    class PrintElements1to5
    {
        public static void main(String[] args)
        {
            recursivePrint(5);
        }
    
        static void recursivePrint(int n)
        {
            if(n<1)
                return;
            recursivePrint(n--);  
            System.out.print(n+" ");
        }
    }

輸出:

Exception in thread "main" java.lang.StackOverflowError
    //when using n=n-1
    class PrintElements1to5
    {
        public static void main(String[] args)
        {
            recursivePrint(5);
        }
    
        static void recursivePrint(int n)
        {
            if(n<1)
                return;
            recursivePrint(n-1);
            System.out.print(n+" ");
        }
    }

輸出:

1 2 3 4 5 

n--返回n的值,然后遞減n 所以在你的情況下,它變成了一個無限循環,因為n永遠不會改變。 您可以使用--n而不是先遞減n ,然后返回n的值。 讓我們舉一個更簡單的例子。

int x = 3;
System.out.println(x - 1); // prints 2, x is still 3
System.out.println(x--);   // prints 3, x becomes 2
System.out.println(--x);   // prints 1, x becomes 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM