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 型などの大きなデータ型を使用するか、多倍長整数の利用も検討しましょう。
-
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:再帰
-
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, … と続きます。 カタラン数は、再帰法と動的計画法のどちらのアプローチでも求めることができます。それでは、それぞれの実装方法を見ていきましょう。 方法