2017-11-14 19 views
-2

私はループについて質問する学生を支援していましたが、基本的に2つの数字xとyがあり、xとyのすべての値を合計して合計したいとします。たとえば、5〜10は45(5 + 6 + 7 + 8 + 9 + 10)を出力します。この人を助けながら、プログラムを再帰的に書くことにしました。私の再帰的な方法は45に戻りませんでした。代わりに5を返し続けます。誰かが私に何が起こっているのか説明できたら、私はそれを感謝します!ありがとう!再帰的メソッドが期待した結果を返さない

public class forLoops { 

    public static void main(String[] args) { 

     int sum = calc(5,10); 
     System.out.println(sum); 


    } 

    public static int calc(int num1, int num2) { 

     int sum = calc(num1, num2, 0); 

     return sum; 
    } 

    public static int calc(int num1, int num2, int total) { 


     if(num1 <= num2) 
     { 
      total += num1; 
      num1++; 
      System.out.println(num1); 
      calc(num1, num2,total); 
     } 

     return total; 
    } 

} 
+2

たぶん代わりに捨てるの再帰カルク呼び出しの出力に何かを戻り値? – azurefrog

+0

@azurefrogああ私の良さ、あなたはとても正しいです。 total = calc(...)を設定すると固定されました。 – OVOFan

+0

'if'の中で' return calc(num1、num2、total); 'を実行することもできます。 – dasblinkenlight

答えて

0

結果を再帰的に呼び出すときは、totalに結果を代入します。それは間違いです。 Javaは価値渡しです。だからあなたは合計に値を割り当てる必要があります。

if(num1 <= num2){ 
    total += num1; 
    num1++; 
    System.out.println(num1); 
    total=calc(num1, num2,total); 
} 

また、totalに割り当てる代わりに直接戻ることもできます。

0

あなたのコードの問題は主に任意の凝集をやっていませんでした。..値は

calc(num1, num2,total) 

から返され保存されることはありません。

置き換える:

total += num1; 
num1++; 
System.out.println(num1); 
calc(num1, num2,total); 

をして:

num1++; 
System.out.println(num1); 
total = num1 + calc(num1, num2 , total); 

はるかに簡単な解決策は、次のようになります。

public class forLoops { 

    public static void main(String[] args) { 

     int sum = calc(5,10); 
     System.out.println(sum); 


    } 

    public static int calc(int num1, int num2) { 

     if(num1 > num){ // break condition 
      return 0; 
     } 

     // aggregation in a recursive manner 
     return num1 + calc(num1+1 , num2); 
    } 
} 
関連する問題