STEP 4.3 (2009 春 8)


<問題>

自然数 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;
}