2017-04-24 69 views
0

問題的措辭是 「Write a method writeSequence接受整數n作爲參數並打印n個數字的對稱序列,其中後接整數爲1,結尾爲1按升序整數從1開始,如下表所示:」使用遞歸打印出收斂和發散數字序列的故障

表基本上是:

1 = 1 
2 = 1 1 
3 = 2 1 2 
4 = 2 1 1 2 
5 = 3 2 1 2 3 
6 = 3 2 1 1 2 3 

我試圖代碼

public void writeSequence(int n){ 
    if (n < 1){ 
     throw new IllegalArgumentException(); 
    } 
    if (n == 1){ 
     System.out.print(n + " "); 
    } 
    else if (n == 2){ 
     System.out.print(1 + " " + 1 + " "); 
    } 
    else if (n % 2 == 0){ 
     System.out.print(n - (n/2) + " "); 
     writeSequence(n - (n/2)); 
     System.out.print(n - (n/2) + " "); 
    } 
    else{ 
     System.out.print(n-(n/2) + " "); 
     writeSequence(n - 2); 
     System.out.print(n-(n/2)+ " "); 
    } 
} 

對於輸入1-10,我的代碼沒有爲6,8和10生成正確答案。任何幫助都非常感謝。

編輯:在標題

編輯2

固定拼寫:

我的結果是

1 = 1 
2 = 1 1 
3 = 2 1 2 
4 = 2 1 1 2 
5 = 3 2 1 2 3 
6 = 3 2 1 2 3 (wrong) 
7 = 4 3 2 1 2 3 4 
8 = 4 2 1 1 2 4 (wrong) 
9 = 5 4 3 2 1 2 3 4 5 
10 = 5 3 2 1 2 3 5 (wrong) 

如果有人能告訴我在哪裏我已經在我的代碼中的錯誤會很好!

+0

*我的代碼沒有產生正確答案爲6,8,和10 * - 究竟是什麼做的,什麼應該的做? – Bohemian

+0

我在最後添加了一個編輯,顯示我的結束表是什麼樣子,看起來應該是什麼樣子! – mikecal7

+0

請參閱:[爲什麼「有人可以幫助我?」不是真正的問題?](http://meta.stackoverflow.com/q/284236) – EJoshuaS

回答

2

您的遞歸調用傳遞不正確的值。每次算法遞歸時,它應該減少2的值。

更改此:

writeSequence(n - (n/2)); 

這樣:

writeSequence(n - 2);