簡體   English   中英

Java:遞歸-循環與If循環

[英]Java : Recursion -While Loop Vs If Loop

代碼設計1:完美工作

 public static void main (String[] args)
    {       
        recursion(2);       
    }

    public static void recursion(int num)
    {
        if (num > 0)
        {
            recursion( num - 1 );
            System.out.println(num);
        }   
    }

代碼設計2:無限循環。

public static void main (String[] args)
    {       
        recursion(2);       
    }

    public static void recursion(int num)
    {
        if (num == 0) return;
        while (num > 0)
        {
            recursion( num - 1 );
            System.out.println(num);
        }   
    }
  1. 可有人plz幫助我理解為什么第二個設計進入無限循環?
  2. 我已經把第二設計歸還了。 因此,它應該工作正常。 您還可以給我詳細解釋嗎?

1.首先, if 不是Not循環 ,則只有for循環, for-eachwhile循環和do-while循環。

2.第二個代碼進入無限循環的原因是,您永遠不會減少 num 的值

做這個....

while (num > 0)
    {
        recursion( num - 1 );
        System.out.println(num);
        num = num - 1;           // Decrementing the value of num by 1
    }  

輸入while循環數大於零且其值不變。

numvaluerecursion方法中傳遞后不會更改。

    if (num == 0) return;
    while (num > 0)
    {
        recursion( num - 1 );
        System.out.println(num);
        num--;                   // add this line.
    }   

num的值在循環內不變。 因此,它一直循環播放。

   while (num > 0)
            {
                recursion( num - 1 );
                System.out.println(num);
            } 

在您的while循環中,您將num傳遞2。 2始終大於0,因此進入無限循環;

為了避免無限循環,您可以更改num變量的值;

 while (num > 0)
            {
                recursion( num - 1 );
                System.out.println(num);
                num--;
            } 

無論使用循環還是遞歸,都不要同時使用它們。

通常,如果可以使用循環來執行其期望的操作,則他不再考慮遞歸,因為使用循環更快且開銷更少。

回到您的問題:
1.無限循環是不可避免的。 如在循環中, num並沒有減少。
2.當然會有一些返回,但是從num = 2num = 1進入recursion的情況下不會。
這是發生了什么:您輸入num = 2recursion 它調用num = 1 recursion 那里有無限循環,當然還有無限的回報。 但是沒有返回recursion(2)回報。

原因是num是按值復制的,而不是對 recursion( num - 1 );的引用 recursion( num - 1 );

編輯:是的,人們很樂意拒絕投票,不是嗎? 的確,引用值與按復制值不是正確的答案,但是在我對他的代碼示例的初步閱讀中,這似乎是對該特定問題的誤解。 我站得住了。

我不知道您為什么要通過所有這些操作來實現這樣的功能? 抱歉,如果您沒有問題,請給我一個很好的建議。

public static void main(String[] args){
    countdown(10);
}

public void countdown(int num){

    for(int i = num; i >= 0; i--){
        System.out.println(num);
    }
}

暫無
暫無

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

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