C言語プログラミング 階乗(再帰呼び出し)
C言語プログラミング、ずっとソートばかり書いてきましたのでたまには違うものを……。
今回は階乗のプログラミングです。
階乗という単語、ご存知でしょうか?
数式で書くならば、たとえば「5!」これは5を大声で叫べと言っているわけではなくて、5の階乗を意味します。
つまり
5!=5×4×3×2×1=120
階段状に乗算を繰り返すということです。
これをC言語で書くと、以下のようになります。
/* 階乗関数ここから */
/* n:階乗する数値 */
int kaijou(int n){
int i,sum=1;
for(i=n;i>0;i--)sum=sum*i;
return sum;
}
/* 階乗関数ここまで */
sumという変数を1で初期化して、それにn~1までを掛け合わせています。
結果上は繰り返しを「i>0」ではなく「i>1」としても変わらないですが、階乗の意味を重視してここでは1まで乗じています。
再帰という考え方を使用すると、これをさらに簡潔に書くことが可能です。
再帰とは自分で自分を呼び出すという考え方です。
再帰を使った階乗プログラムは以下の通りです。
/* 階乗関数ここから */
/* n:階乗する数値 */
int kaijou(int n){
if(n>0)return(n * kaijou(n-1));
else return (1);
}
/* 階乗関数ここまで */
つまり、5!を求めるとき
5!→5×4!→5×4×3!→5×4×3×2!→5×4×3×2×1!→5×4×3×2×1×1
と階層的に処理しています。
Wikipedia 階乗
Wikipedia 再帰呼び出し
Wikipedia C言語