応用情報技術者試験 - SE娘の剣 -

応用情報処理技術者試験の対策サイトです。 応用情報処理技術者試験の午前問題を中心とした基礎用語の解説を中心に掲載します。書き始めたばかりなので、内容はまだまだ不十分です。少しずつ追記していきます

4.nの階乗を求めるプログラム

fact(n)は,非負の整数nに対してnの階乗を返す。
たとえば、fact(4)=4×3×2×1=24 です。これを求めるプログラムを書いてみます。

1.再帰的に書く場合
#include <stdio.h>

//fact関数
int fact(int n)
{
 if(n==0){  //"n"が0の場合
  return 1;  //1を返す
 }
 else{//"n"が0以外の場合
  //"n-1"を引数としてfact関数の再帰呼び出し
  return n*fact(n-1);  //"n"と戻り値の積を返す
 }
}

//main関数
void main(){
 int n;  //"n"をint型変数で定義
 //標準入力からnの値を取得
 printf("nの値を入力してください:");
 scanf("%d", &n);   //scanfを利用して整数入力させ、nに入れる

 //fact関数を階乗の結果を呼び出して表示する
 printf("fact(n)=%dです\n", fact(n));
}
ああ

2.再帰的に書かない場合
#include <stdio.h>

void main(){
 int n; //ある整数n
 int fact = 1; //nの階乗。最初は1とする
 int i; //ループに使う値
 
 // 標準入力からnの値を取得
 printf("nの値を入力してください:");
 scanf("%d", &n);   //scanfを利用して整数入力させ、nに入れる
  
 //階乗の計算。iを1から順にnになるまで掛け算する
 for(i=1; i<=n; ++i) {
     fact = fact * i;
  }; 

 //結果を表示する
 printf("%dの階乗は、%dです\n",n,fact);
}