STEP 4.5 (2004 春 14)


<問題>

非負の整数 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;
}
~