2016-05-18 80 views
1

給定兩個數字,比如說start = 1end = 4,我試圖按順序向上然後向下計算所有數字。無循環允許使用遞歸計算上下數字

1 2 3 4 3 2 1

我試着寫一個遞歸函數。該功能正在計數罰款和它的打印1 2 3 4,但是當我嘗試倒數,我期望4 3 2 1,但我陷入了一個無限循環。原因是起始值在遞歸中丟失,當從下往上計數時,我不知道該停止在哪裏。

我已經花了4個小時。我們甚至可以在遞歸中做到這一點?遞歸是單向的

public static void countUpDown(int start, int end) { 
    //to pring bottom up -> 4 3 2 1 
    if (start > end && end > 0) { 
     System.out.println(end - 1); 
     countUpDown(start, end - 1);  
    } 

    //to print up 1 2 3 4 
    if (start <= end) { 
     System.out.println("-->" + start); 
     countUpDown(start + 1, end); 
    } 
} 
+0

任何幫助把我放在正確的方向將有助於 –

回答

4

你只需要使用遞歸計數。然後,當函數返回時,你正在下降。這可以通過以下方式實現:

public void countUpAndDown(int start, int end) { 
    System.out.println(start); 
    if (end == start) return; 
    countUpAndDown(start+1, end); 
    System.out.println(start); 
} 
+0

打印工作,但我認爲這是更多的算法挑戰遞歸上升和下降,而不是正確打印的問題。讓我們看看對他來說是否夠用了。 +1 – UDKOX

0

你也許可以將它從1-> 3設置爲向上計數和> = 4做一個 - 下降到1

+0

我在這裏回答了你 –

0

試試這個

private static int CountUpAndDown(int end, int first, int start) 
    { 
     if(end==first) 
     { 
      return -1; 
     } 
     if (start > end) 
     { 
      System.out.println(--end); 
     } 
     else { 
      System.out.println(start++); 
     } 
     return CountUpAndDown(end, first, start); 
    }