Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語で数の階乗を計算するプログラムの書き方を解説

階乗とは

ある数 n が与えられたとき、その数の階乗(factorial)を計算するのが本記事の目的です。階乗とは、その数から1までのすべての整数を掛け合わせた値のことを指します。

階乗は次のように定義されます。

0! = 1
1! = 1
2! = 2 × 1 = 2
3! = 3 × 2 × 1 = 6
4! = 4 × 3 × 2 × 1 = 24
5! = 5 × 4 × 3 × 2 × 1 = 120
.
.
.
N! = n × (n-1) × (n-2) × … × 1

なお、0の階乗は数学的な規約により 1 と定義されている点に注意してください。

入力例と出力例

入力1:n = 5
 出力:120

入力2:n = 6
 出力:720

階乗を求める主な方法

階乗を計算する方法はいくつかあります。

  • ループ(繰り返し処理)を使う方法
  • 再帰呼び出しを使う方法(※効率はあまり良くありません)
  • 関数を使う方法

ここでは、関数と再帰を組み合わせた実装方法を紹介します。

アルゴリズム

開始
ステップ1:階乗を計算する関数を宣言する
  int factorial(int n)
   もし n = 0 ならば
    return 1
   ここまで
   return n * factorial(n - 1)
ステップ2:main() 関数内で
  変数を int num = 10 として宣言する
  factorial(num) の結果を表示する
終了

C言語での実装例

サンプルコード

#include<stdio.h>
// 階乗を求める関数
int factorial(int n){
   if (n == 0)
   return 1;
   return n * factorial(n - 1);
}
int main(){
   int num = 10;
   printf("%dの階乗は%dです", num, factorial(num));
   return 0;
}

実行結果

Factorial of 10 is 3628800

このプログラムでは、factorial 関数が自分自身を呼び出す再帰構造になっています。n が 0 になった時点で 1 を返し、そこから順に掛け算が行われて最終的な階乗の値が求まります。

C++での実装例

サンプルコード

#include<iostream>
using namespace std;
// 階乗を求める関数
int factorial(int n){
   if (n == 0)
   return 1;
   return n * factorial(n - 1);
}
   int main(){
   int num = 7;
   cout << "Factorial of " << num << " is " << factorial(num) << endl;
   return 0;
}

実行結果

Factorial of 7 is 5040

まとめ

階乗の計算は、再帰を使うとコードが簡潔になる一方、大きな数を扱う場合はスタックオーバーフローのリスクや処理効率の問題が生じる可能性があります。実務では、for文などのループを使った実装の方が安全で効率的な場合が多いので、用途に応じて使い分けることをおすすめします。また、階乗の値は非常に大きくなりやすいため、大きな n を扱う場合は long long 型などの大きなデータ型を使用するか、多倍長整数の利用も検討しましょう。

  1. n番目のフィボナッチ数を求めるPythonプログラム【再帰・動的計画法】

    本記事では、n番目のフィボナッチ数を計算するPythonプログラムについて解説します。フィボナッチ数とは?フィボナッチ数とは、次の漸化式で定義される数列のことです。Fn = Fn-1 + Fn-2ただし、初期値は F0 = 0、F1 = 1 とします。フィボナッチ数列の最初のいくつかの値は以下の通りです。0, 1, 1, 2, 3, 5, 8, 13, ..................フィボナッチ数は、再帰と動的計画法(Dynamic Programming)という2つの代表的な手法で求めることができます。それでは、それぞれの実装方法をPythonスクリプトで見ていきましょう。方法1:再帰

  2. Pythonでn番目のカタラン数を計算するプログラム|再帰法と動的計画法

    本記事では、n番目のカタラン数を計算する方法について解説します。 カタラン数(Catalan number)は、次の漸化式で定義される自然数の数列です。 $$C_{0}= 1,\quad C_{n+1}=\displaystyle\sum\limits_{i=0}^n C_{i}C_{n-i}\quad (n \geq 0)$$ n = 0, 1, 2, 3, … に対するカタラン数は、1, 1, 2, 5, 14, 42, 132, 429, … と続きます。 カタラン数は、再帰法と動的計画法のどちらのアプローチでも求めることができます。それでは、それぞれの実装方法を見ていきましょう。 方法