C++で再帰を使って数値の階乗を求めるプログラム
階乗とは
非負整数 n の階乗(factorial)とは、n 以下のすべての正の整数を掛け合わせた積のことです。記号「!」を用いて表されます。
例えば、4 の階乗は次のように計算されます。
4! = 4 × 3 × 2 × 1 4! = 24
整数の階乗は、再帰を使ったプログラムでも、繰り返し処理(反復)を使ったプログラムでも求めることができます。
再帰を使った階乗を求めるC++プログラム
以下のプログラムは、再帰処理を用いて数値の階乗を求める例です。
サンプルコード
#include <iostream>
using namespace std;
int fact(int n) {
if ((n==0)||(n==1))
return 1;
else
return n*fact(n-1);
}
int main() {
int n = 4;
cout<<"Factorial of "<<n<<" is "<<fact(n);
return 0;
}実行結果
Factorial of 4 is 24
プログラムの解説
上記のプログラムでは、関数 fact() が再帰関数として機能しています。main() 関数は、階乗を求めたい数値を引数に渡して fact() を呼び出します。該当するコードは以下の通りです。
cout<<"Factorial of "<<n<<" is "<<fact(n);
引数が 0 または 1 の場合、fact() は 1 を返します。これが再帰の終了条件(ベースケース)です。それ以外の場合は、引数を n-1 として自分自身を再帰的に呼び出し、その結果に n を掛け合わせた値を返します。
int fact(int n) {
if ((n==0)||(n==1))
return 1;
else
return n*fact(n-1);
}処理の流れ
fact(4) を呼び出した場合、内部では次のように計算が展開されていきます。
fact(4) = 4 * fact(3) = 4 * 3 * fact(2) = 4 * 3 * 2 * fact(1) = 4 * 3 * 2 * 1 = 24
注意点
再帰による実装はコードがシンプルで直感的ですが、引数が大きくなると呼び出しが深くなり、スタックオーバーフローを引き起こす可能性があります。実用的な用途では、引数の範囲に注意するか、繰り返し処理による実装を検討するとよいでしょう。
-
再帰を使わずに数値の階乗を求めるPythonプログラム
再帰(リカージョン)を使用せずに数値の階乗を求めたい場合は、「while」ループを活用するのが効果的です。階乗とは、ある正の整数から1までのすべての整数を掛け合わせた値のことで、例えば7の階乗は「7 × 6 × 5 × 4 × 3 × 2 × 1 = 5040」となります。サンプルコード以下は、whileループを使って階乗を計算するプログラムの実装例です。my_num = int(input(Enter a number :)) my_factorial = 1 while(my_num>0): my_factorial = my_factorial*my_num my_
-
Pythonで再帰関数を使って階乗を計算する方法を解説
ある数の階乗(Factorial)とは、1からその数までのすべての整数を掛け合わせた積のことです。たとえば、5の階乗は「5 × 4 × 3 × 2 × 1 = 120」となります。再帰関数(Recursive Function)とは、自分自身を呼び出す関数のことを指します。この仕組みを使うと、階乗のように同じ処理を繰り返し行う計算を、シンプルで読みやすいコードで実装できます。再帰による階乗の計算例次のプログラムでは、factorial() 関数が引数を1つ受け取り、値を1ずつ減らしながら自分自身を呼び出します。そして引数が1に達した時点で呼び出しを終了し、結果を順番に掛け合わせて返します。de