いつもお世話になっております。
現在、再帰文を学習しているのですが、少し理解に戸惑う出力結果が出たので、質問いたします。
下記のコードの出力結果ですが、
14
7
21
21
7
21
となります。
メインの疑問点
1)funは再帰関数になっているのか?
2)4つ目の出力がなぜ21になるのかが疑問です。
それ以外の出力は、例として出しました。
また、再帰文についての理解を深めたいので、その他にもご指摘いただける部分があれば、お願いいたします。
私の考えでは、1/2は0余り1なので、一番最後のreturnの処理に入ると考えていますが、どうでしょうか?
*(a+aつまりa+a=7+7=14、そして更に()の外の+aを足して、21が出力されると考えているのですが、なぜ()の外で+aを行えば、aにaが加算されるのか説明ができませんし、その考えは、出力により誤りだと証明されているので、違う考え方で、どう動いているのか知りたいです。)
そもそも、メッソドを呼び出した時には、何が出力されているのでしょうか?
私の理解では、この再帰文のなかでは、bが回数制限(for文のi<lengthのような使い方)をされていて、出力されているのは、aの値だと思っていたのですが、やはり間違っていますでしょうか?
Java
1 2public class teratailToAsk { 3 4 public static void main(String[] args) { 5 // TODO 自動生成されたメソッド・スタブ 6 System.out.println(fun(7, 2)); 7 System.out.println(fun(7, 1)); 8 System.out.println(fun(7, 3)); 9 System.out.println(fun2(7, 2)); 10 System.out.println(fun2(7, 1)); 11 System.out.println(fun2(7, 3)); 12 13 } 14 public static int fun(int a, int b) 15 { 16 if (b == 0) 17 return 0; 18 if (b % 2 == 0) 19 return fun2(a+a, b/2); 20 //else 21 return fun2(a+a, b/2) + a; 22 } 23 24 public static int fun2(int a, int b) 25 { 26 if (b == 0) 27 return 0; 28 if (b%2==0) 29 return fun2(a+a, b/2) + a; 30 31 return fun2(a+a, b/2) + a; 32 } 33 34} 35
回答2件
あなたの回答
tips
プレビュー