2016-09-01 9 views
-3

私はこの質問を解決する方法を理解しようとしていましたが、わかりません。私がmystery(2,25)を取った場合、b==0b%2=1ではないので、私はmystery(2+2, 25/2) + 2を持っています。私は最後に+2で何をするのかわかりません。abを追加するか、新しい値でコードをやり直すことになっているのか分かりません。Java再帰を解決するための助けが必要

mystery(2, 25)との値はそれぞれ何ですか?選択する

public static int mystery(int a, int b) { 
    if (b == 0) return 0; 
    if (b % 2 == 0) return mystery(a+a, b/2); 
    return mystery(a+a, b/2) + a; 
} 

回答:bは0で、再帰呼び出しチェーンが終了するまで

33554432, 177147 
525, 1331 
50, 33 
75, 44 
+5

は、鉛筆と紙を取得し、ステップを書き出します。完了したら再帰を理解するかもしれません。 – duffymo

+3

IDEでデバッグしてください。したがって、コードをステップバイステップで実行し、変数が変化するのを見ることができます。 – vanje

+0

この質問を残しましたか? – Vitorlui

答えて

0

は謎に各呼び出しを評価します。次に、最終的な0の結果をコードに中間a(the + a)を付けて追加します。

+3

それは答えではありません。 – xenteros

3

私は答えを説明しようとしているイメージを作成...あなたが戻って、次の呼び出しの復帰後に追加する必要が+2 -About

...

注:あなたが合格した場合浮動小数点値からint型パラメータへ12.5として、パラメータは整数部分のみを取得します:12

正常であれば、正しくチェックしてください! ;)

enter image description here

+2

upvote画像のため – Miki

+0

画像ありがとうございます。私はすべてのステップと、なぜコードがb = 0になるまで続くのか理解しています。しかし、私は答えが50と33である理由を理解していません.2 * 25は50で3 * 11 = 33なのではありますか? – karrokakka

+0

私は紙の上にすべてを書いて、ついにわかった!すべての助けとイメージをありがとう。それは多くの助けになります! – karrokakka

関連する問題