2016-05-18 11 views
1

2つの数字が与えられた場合、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); 
    } 
関連する問題