R52 0,30 階乗の計算
考察
再帰処理の使い方について学習。
void 0byte 空のデータ型
問題
数字Nを入力し、N!(Nの階乗)を求める。関数を利用し再帰処理を行う。
※再帰処理とは、関数内部で再び自己の関数を呼び出す方法をいう。
表示例
------------階乗を求める関数----------
数字を入力してください---->10
10の階乗は3628800です。
--------------------------------------
考え方
(1)数字(suuji)を入力する。
(2)数字を引数として階乗を求める関数(kaijo)を実行し答え(kotae)に受け取る。
「kotae = kaijo(suuji)」
(3)階乗を求める関数。「int kaijo(int n)」
①仮引数の数字をnとする。
②nが0のとき、結果1を返す。「retrun 1」
③そうでないとき、結果n * kaijo(n - 1)を返す。「return n * kaijo(n - 1)」
※上記kanjo(n - 1)は受け取った数字より1小さい数字を引数として自分自身を呼び
出している。これを再帰処理という。
(4)答え(階乗の結果)(kotae)を表示する。
#include
int kaijo(int n)
{
int m;
if (n == 0){
return 1; /* 0! = 1 */
}
else{
m = kaijo(n - 1); /*(n-1)! を求めてそれをmとおく、ここのkaijo(n-1)が再帰呼び出し*/
return n * m; /* n! = n * m */
}
}
int main()
{
int suuji,kotae;
printf("----------階乗を求める関数---------\n");
printf("数字を入力してください。\n");
scanf("%d",&suuji);
kotae = kaijo(suuji);
printf("%dの階乗は%dです。\n",suuji,kotae);
printf("-------------------------------\n");
return 0;
}
int kaijo(int n)
{
int m;
if (n == 0){
return 1; /* 0! = 1 */
}
else{
m = kaijo(n - 1); /*(n-1)! を求めてそれをmとおく、ここのkaijo(n-1)が再帰呼び出し*/
return n * m; /* n! = n * m */
}
}
int main()
{
int suuji,kotae;
printf("----------階乗を求める関数---------\n");
printf("数字を入力してください。\n");
scanf("%d",&suuji);
kotae = kaijo(suuji);
printf("%dの階乗は%dです。\n",suuji,kotae);
printf("-------------------------------\n");
return 0;
}