例としてよく用いられる階乗の計算を紹介します。
数学では(!:エクスクラメーションマーク)で、階乗を表します。
階乗… (n:非負の整数値)
n! = n × (n-1) × … × 3 × 2 × 1
0! = 1
|
|簡略化
↓
0! = 1
n! = n * (n-1)!
例:4!=4×3×2×1=24
これをプログラムで組んでみます。
public class factorial { static int fact(int n) { if(n==0) { return 1; // 0! = 1 } else { return n * fact(n-1); // n! = n * (n-1)! ←ここが再帰呼び出し } } public static void main(String[] args) { int n = Integer.parseInt(args[0]); if(0<n) { System.out.println(n+"! = "+fact(n)); } else { System.out.println("※非負の整数値を入力してください。"); } } }
・流れ
引数(4)を与える
↓
非負の整数のためfact(4)が呼ばれる
↓
n(4)=0ではない
↓
n*fact(n-1)が呼ばれる
4*fact(3)
3*fact(2)
2*fact(1)
1*fact(0)
↓
return 計算結果(24)
このfact()でfact()自身を呼び出しているというのが再帰呼出しです。
1*fact(0)の次はn(0)=0なので1が返されます。
then節が実行されると再帰呼出しが停止します。(再帰の停止条件)
つまり、「4*3*2*1」の処理をif elseのreturn内で行っているということです。
参考
再帰 - Wikipedia
再帰呼出し
if-then文を理解する
プログラミング言語2 - 関数と再帰
【改訂版】Eclipseではじめるプログラミング(3):プログラミングの醍醐味! Javaで“条件式”を理解する (1/3) - @IT
0 件のコメント:
コメントを投稿