2017-10-28 14 views
2

私は再帰を学習しようとしています。私は与えられた値を減らし、値が0になるまで偶数を合計する以下の簡単な方法を持っています。しかし、値= 0になると、何とか再帰呼び出し(IF-ELSE条件にあります)私の価値を元に戻し、それが初期値に戻るまでもう一度加える。私は2つのスクリーンキャストを記録した。たとえば、クラス内でメインメソッドを作成し、5でメソッドを実行すると、出力6が返されますが、同じ値のJUnitテストではが期待されますが、実際の値はです64!私は何が間違っているのか分かりません。また、値が0になったら、正しいものを返しますか? (入力の後、減少と増加値を注意してください)私はそこに合計を返す方法がわからなかったが、同時に合計は、方法自体の出力として戻ってきた。..値が減少し、再帰で値が予期せず増加する

class EvenSums { 
    private static int sum = 0; 

    public static int sumEvenRec(int n) { 
    int input = n; 

    if(input <= 0) { 
     return 0; 
    } else { 
     if(input % 2 == 0) { 
      sum += input; 
     } 
     sumEvenRec(input-1); 
    } 
    return sum; 
} 

ここでデバッグスクリーンキャストですそれがreturn sumからどのように入力の値を増加させる再帰関数に戻るかを注意してください。 あなたが見ることができるテストスクリーンキャストでDEBUG SCREENCAST

:入力2の場合
java.lang.AssertionError: expected:<2> but was:<58>
を入力5の場合:java.lang.AssertionError: expected:<6> but was:<64>
入力6の場合:Intrestingly java.lang.AssertionError: expected:<12> but was:<76>

、入力について:作品!静的フィールドsumは、前のテスト(つまり、静的変数を回避または十分に注意して使用する必要が理由だ)から、その値を保持しますので、あなたは、JVMの同じ実行中に多くのテストを行っている
TEST SCREENCAST

答えて

0

このフィールドを削除し、再帰呼び出しの戻り値として合計を渡す必要があります(既に値を返していますが、合計を別々に行う)。

+0

おっと!ありがとう! staticを削除してオブジェクトを作成しました。はい!ありがとう! – WannaBeForNow

関連する問題