<問題>
自然数 n に対して、次のように再帰的に定義される関数 f(n)を考える。
f(n) : if n <= 1 then return 1 else return n + f(n-1)
プログラムを作成せよ。
<実行結果>
入力してください: 5
func(5) = :15
<ヒント> 再帰プログラムは、停止条件と再帰条件で、とらえる! 再帰的な関数f(n)は、 停止条件 (n <= 1なら)f(1) = 1 (ズバっと答えが決まる場合) 再帰条件 (n > 1なら) f(n) = n + f(n-1) (N−1の場合の答えがわかるならNの答えは) func(5) = 5 + func(4) func (4) = 4 + func(3) func(1) = 1 10 15
解答例 #include <stdio.h> /* この関数は、ずばり、1-nまでの合計sumの再帰的な定義 whileやforで答を求める方法と、比較しておくこと */ int func (int n) { if (n <= 1) /* 停止条件かどうかをチェック */ return 1 ; /* 停止条件 条件 nが1の場合 戻り値は 1 */ else return n+func(n-1); /* 再帰条件 条件 N > 1の場合 n-1のfuncを計算し 戻り値は、その答えにnを加えたもの */ } int main (void) { int i; printf("入力してください: "); scanf("%d", &i); printf("func(%d) = %d\n",i, func(i)); return 0; }