2009年7月31日金曜日

階乗 (factorial)

公式


階乗は再帰呼び出しの例としてよく扱われる。 今回は非再帰版と再帰版の両方を実装。

C言語での実装

#include <stdio.h>

/* ---------------------------------------------
  階乗を計算する
  引数1: n 整数
  戻り値 階乗
 ---------------------------------------------*/
int factorial(int n)
{
    int fact = n;

    if (n <= 0) return 1;

    while (--n)
        fact *= n;

    return fact;
}


/* ---------------------------------------------
  階乗を計算する (再帰)
  引数1: n 整数
  戻り値 階乗
 ---------------------------------------------*/
int factorial_recursive(int n)
{
    if ( n <= 0 ) {
        return 1;
    } else {
        return factorial_recursive(n - 1) * n;
    }
}

/* main */
int main(void)
{
    int n = 5;
    int fact;

    fact = factorial(n);
    printf("%d! = %d\n", n, fact);

    fact = factorial_recursive(n);
    printf("%d! = %d\n", n, fact);

    return 0;
}
実行例
5! = 120
5! = 120

0 件のコメント:

コメントを投稿