- 締切済み
教えて下さい!
以下のプログラムがわかりません。 最近学び始めたのですが、うまく理解できない所があります public static void main(string[]args) int i=99 system.out.printIn(f(i)); static int f(int i) if(i<=0) return 0; else if(i%2==0) return 1+f(i -1) else return f(i-1); 少し省いてますが、このプログラムを実行した時の出力される整数、 メソッドfは何を計算しているのか? いろいろと調べてみてもわからないので、どなたかご教授お願いします!
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- jjon-com
- ベストアンサー率61% (1599/2592)
static int f(int i) //メソッドfの引数iが if(i<=0) //ゼロならば return 0; //戻り値は0 else if(i%2==0) //偶数ならば return 1+f(i -1) //戻り値は1+f(i-1) else //奇数ならば return f(i-1); //戻り値はf(i-1) ということで,次のように自分自身が次々と呼び出される再帰プログラムです。 f(99) = f(98) = 1 + f(97) = 1 + f(96) = 1 + (1 + f(95)) = 1 + (1 + f(94)) = 1 + (1 + (1 + f(93))) = 1 + (1 + (1 + f(92))) = 1 + (1 + (1 + (1 + f(91)))) = 1 + (1 + (1 + (1 + f(90)))) ....略.... = 1 + (1 + (1 + (1 + (1 + .... (1 + f(3)) .... )))) = 1 + (1 + (1 + (1 + (1 + .... (1 + f(2)) .... )))) = 1 + (1 + (1 + (1 + (1 + .... (1 + (1 + f(1))) .... )))) = 1 + (1 + (1 + (1 + (1 + .... (1 + (1 + f(0))) .... )))) = 1 + (1 + (1 + (1 + (1 + .... (1 + (1 + 0)) .... )))) 引数が偶数の場合のみ 1 + f(i-1) のように1を加算していますから, 「1~99の範囲に含まれている偶数の個数を数えるプログラム」 だということになります。 class Q7287523 { public static void main(String[] args) { int i = 99; System.out.println(f(i)); } static int f(int i) { if (i <= 0) return 0; else if(i % 2 == 0) return 1 + f(i - 1); else return f(i - 1); } }