60日間全力プログラミング

プログラミング初心者が二ヶ月間でどこまでいけるかを記録したプログラミング学習ブログ

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;
   
}