[英]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);
}
}
}
我保留了不干凈的代碼,以盡可能少地更改OP的代碼。 值得一提的是,您可以嘗試簡化上述所有示例,以使它們不同時使用if和else塊,而僅使用一個if塊,同時還擺脫了所有return語句。
祝您好運,並喜歡編碼。 :)
是的,您的理解是正確的。
但是一個澄清
我想您已經知道這一點,但是您的代碼將不會顯示1
。 它會打印:
2
3
4
5
如果您也要打印1,則可以用3種不同的方式解決此問題
將n==1
條件更改為n==0
。 這就是我要做的。 對我而言,這是最簡單且最自然的。
public static void numbers (int n){
if(n==0) return;
else{
numbers(n-1);
System.out.println(n);
return;
}
}
在有條件的情況下移動打印件
public static void numbers (int n){
System.out.println(n);
if(n==1) return;
else{
numbers(n-1);
return;
}
}
現在您可能會猜到這會將數字打印為
5
4
3
2
1
在兩種情況下都執行打印,但是在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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.