<問題>
非負の整数 n に対して、次のとおりに定義された関数 f(n), g(n)がある。
f(n) : if n <= 1 then return 1 else return n * g(n-1)
g(n) : if n = 0 then return 0 else return n + f(n-1)
プログラムを作成せよ。
<実行結果>
入力してください: 5
funcf(5) = 65
<ヒント> funcf (5) = 5 * funcg (4) funcg (4) = 4 + funcf (3) funcf (3) = 3 * funcg (2) funcg (2) = 2 + funcf (1) funcf(1) = 1 3 9 13 65
解答例 #include <stdio.h> int funcf (int); int funcg (int); int funcf (int n) { if (n <= 1) return 1; /* 停止条件 条件 n <= 1の場合 戻り値は1 */ else return n * funcg(n-1); /* 再帰条件 条件 n > 1の場合 n-1のfuncgを計算し 戻り値は、その結果にnをかけたもの */ } int funcg (int n) { if (n == 0) return 0; /* 停止条件 条件 n の値が1の場合 戻り値は0 */ else return n + funcf(n-1); /* 再帰条件 条件 n > 1の場合 n-1のfuncfを計算し 戻り値は、その結果にnを加えたもの */ } int main (void) { int i; printf("入力してください: "); scanf("%d", &i); printf("funcf(%d) = %d\n",i, funcf(i)); return 0; } ~