2014-10-29 64 views
1
System.out.printf("%5d", method(12)); 
    System.out.println(); 
} 

public static int method(int 12){ 
    if (No == 1){ 
     return 1; 
    } 

    int bob = 2 * method (12 - 1); 

    return bob; 
} 

我的程序可以打印二進制序列;但只有最後一屆。 ex)N = 12; 2048 但我想我的程序打印1 2 4 8 16 32 64 128 256 512 1024 2048我迷路遞歸N乘以2(二進制序列)

回答

1

包括在計數方法print語句只是return語句

這樣的事情之前, :

public static int count(int n){ 
    if (n == 1) 
    { 
     System.out.printf("%15d", 1); 
     return 1; 
    } 

    int nTerms = 2 * count (n - 1); 
    System.out.printf("%15d", nTerms); 

    return nTerms; 
} 
+0

是的,我錯過了「1」。 – JosEduSol 2014-10-29 03:32:32

0

在這種情況下,你已經提到的,遞歸方法亙古不變的所有值恢復爲主要方法,因此主不會打印sequence.A遞歸函數存儲在調用棧所有的局部變量值(它是數據結構由C,JAVA使用)。因此,您要麼將數據保存在遞歸函數中,要麼將其自身打印出來。有關遞歸調用堆棧的一些知識將有助於理解。請參閱this link

在你期望的序列,直到1024的10的輸入的情況下,編輯呼叫「計數(N)進行計數(N + 1)」主的方法,因爲有11個數字,包括1024

遞歸提醒我一個奇特的事情。嘗試谷歌的遞歸',你會得到你的意思是:遞歸點擊,導致同一個搜索頁面再次導致無限循環的遞歸。 :)