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