<問題>
入力された正の整数の階乗を求める再帰プログラムを作成せよ。
(0の階乗と1の階乗は1だけれども、0の階乗は今回、扱わないことにします。
<実行結果>
入力してください: 6
6の階乗:720
入力してください: 4
4の階乗:24
<ヒント> 再帰の話題には、(1)再帰的な(関数定義と)プログラム (2)実行の様子、結果 再帰プログラムは、停止条件と再帰条件で、とらえる! Nの階乗の再帰プログラムは、 停止条件 ?の階乗は? (ズバっと答えが決まる場合) 再帰条件 (Nが?では、ないのなら)Nの階乗はN-1の階乗の値 ? (N−1の場合の答えがわかるならNの答えは) 実行結果 rfactorial(5) = 5 * rfactorial(4) (再帰条件) rfactorial (4) = 4 * rfactorial (3) rfactorial(1) = 1 (停止条件) 120 720以下、プログラムヒント3を超えたら、すぐに答えを見ずに、考えてみよう
解答例 #include <stdio.h> int rfactorial (int n) { if (n == 1) /* 停止条件かどうかをチェック */ return 1; else /* 再帰条件 */ return n*rfactorial(n-1); } int main () { int i; printf("入力してください: "); scanf("%d", &i); printf("%dの階乗:%d¥n",i, rfactorial(i)); return 0; }