fact

引数に指定した自然数の階乗を求めます。再帰関数。二重階乗を求めるにはfactDouble関数を使います。

構文
  1. Double = fact( 数値 )
引数
数値
0以上の整数
戻値
引数に指定した数値の階乗。

プログラム

//////////////////////////////////////////////////
// 【引数】
//   数値 : 0以上の整数 
// 【戻値】
//   引数に指定した数値の階乗。 
//////////////////////////////////////////////////
FUNCTION fact(n)
	IF n <> ABS(INT(n)) THEN EXIT
	IFB n = 0 OR n = 1 THEN
		RESULT = 1
	ELSE
		RESULT = n * fact(n - 1)
	ENDIF
FEND

解説

  1. 2行目
    	IF n <> ABS(INT(n)) THEN EXIT
    
    変数nが0以上の整数でなければ終了
  2. 3行目
    	IFB n = 0 OR n = 1 THEN
    
    もし変数nが0か1ならば4行目>>>、そうでなければ6行目>>>
  3. 4行目
    		RESULT = 1
    
    戻値として1を返す。
  4. 6行目
    		RESULT = n * fact(n - 1)
    
    変数n×(n-1)の階乗を返す。再帰呼び出し。

階乗

\(n\)の階乗\(n!\)は、1から\(n\)までのすべての整数の積を言います。例えば5の階乗の場合、

\[5! = 5 \times 4 \times 3 \times 2 \times 1 = 120\]

となります。

定義

  1. \[n! = \prod_{k=1}^{n}k = n \times (n-1) \times \cdots \times 3 \times 2 \times 1\]
  2. 再帰的な定義 \[ \begin{eqnarray} n!=\left\{ \begin{array}{ll} 1, &\rm{if}\ n = 0 \\ n \times (n-1)!, &\rm{if}\ n > 0 \end{array} \right. \end{eqnarray} \]
  3. \[0! = 1\]

プログラムは\(n=1\)になるまで、再帰呼び出しで計算しています。