という意味です。また0!=1です。(そんなの知ってらあ!) では、早速プログラムを書いてみましょう。n! = n * (n-1) * (n-2)*....3 * 2 * 1
ここで注意すべきことは、kaijo関数の中身でしょう。
xが0ならば1を返します。そうでないときは xにkaijo(x-1)を書けたものを返します。 帰る前にまたkaijo関数が呼ばれているので kaijo関数を実行します。そうするとxが0になるまで kaijo関数が呼ばれ続けます。
結局x * (x-1) * (x-2) *...* 2 * 1を返す ということになります。
このように、関数内で自分自身を呼び出すことを 再起呼び出し(recursive call)といいます。 階乗の計算が、必ず例に出されます。
さて、x * kaijo(x-1)のデータ型は
kaijo関数の戻り値なのでlong型でなくてはいけません。
xはint型kaijo(x-1)は当然long型です。Cでは型の
異なる2項演算では大きい方の型に統一されます。
従ってxはlong型とみなされます。ですから
return の値もlong型となり問題ありません。
今度は、n!のnを入力するようにしました。
−1入力で終了します。
今度はかなり大きいnでも大丈夫ですね。
Update Dec/09/1996 By Y.Kumei