簡體   English   中英

Java中的遞歸方法

[英]Recursive Method in java

我有這段代碼,我只是想知道我對它的理解是否正確。

將5傳遞給方法編號,並且n現在等於5。if語句為false,因此執行else語句,然后執行numbers(5-1)然后再次執行方法編號,並且不打印n或返回。

現在n = 4並重復相同的方法,直到n = 1到達終點為止? 所以從這一點開始,它返回到n = 2,跟隨打印2(System.out部分),然后返回,這時返回n = 3,打印3並返回..依此類推,直到5?

那就是我想發生的事情,請有人為我澄清一下,謝謝!

public class test {

    public static void main(String [] args){

        numbers(5);
    }

    public static void numbers (int n){

        if(n==1) return;
        else{
            numbers(n-1);
            System.out.println(n);
            return;
        }
    }
}

您的理解是正確的。 您可以通過在調試器中單步執行代碼來驗證自己。

您的理解和代碼是正確的。 我只建議您不需要在else塊中使用return語句,因為您有適當的終止條件。 因此,修改后,您的代碼將像這樣。

public class test{
    public static void main( String[] args )
    {
       numbers(5);
    }

    public static void numbers (int n){

        if(n==1) return;
        else{
            numbers(n-1);
            System.out.println(n);
        }
    }
}

ps(前腳本)

我保留了不干凈的代碼,以盡可能少地更改OP的代碼。 值得一提的是,您可以嘗試簡化上述所有示例,以使它們不同時使用if和else塊,而僅使用一個if塊,同時還擺脫了所有return語句。

祝您好運,並喜歡編碼。 :)


是的,您的理解是正確的。

但是一個澄清

我想您已經知道這一點,但是您的代碼將不會顯示1 它會打印:

2
3
4
5

如果您也要打印1,則可以用3種不同的方式解決此問題

方法1

n==1條件更改為n==0 這就是我要做的。 對我而言,這是最簡單且最自然的。

public static void numbers (int n){

    if(n==0) return;
    else{
        numbers(n-1);
        System.out.println(n);
        return;
    }
}

方法2

在有條件的情況下移動打印件

public static void numbers (int n){

    System.out.println(n);
    if(n==1) return;
    else{
        numbers(n-1);
        return;
    }
}

現在您可能會猜到這會將數字打印為

5
4
3
2
1

方法3

在兩種情況下都執行打印,但是在if塊之后,而不是之前

public static void numbers (int n){

    if(n==1){
        // Do nothing, Don't return yet.
        //return;
    } else{
        numbers(n-1);
        // Don't return yet.
        //return;
    }
    System.out.println(n);
}

PS

  • 關於使用調試器的優點,調試器是您的朋友。 並且在編碼時,我建議使用EclipseIntelliJ IDEA 我僅使用Eclipse已有多年,但是由於Google似乎正在將IntelliJ IDEA用於其Android開發,因此可能也值得一試。

暫無
暫無

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

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