以前のリビジョンの文書です


ex11-7.c

関数 fact() が以下のように定義されている。 関数 fact() を(変更せずそのまま)利用し、キーボードから自然数 n の値を入力すると、n!(n の階乗)の値を出力するプログラム ex11-7.c を作成し、kiso2コマンドを用いて提出しなさい。 ただし、n に 0 未満の値が入力された場合は、プログラムは何も出力せずに終了するものとする。

fact.c
int fact(int n) {
   if (n == 0)
     return 1;             // 0! = 1
   else
     return n*fact(n-1);   // n! = n * (n-1)!
}

実行例:

t180900@s01cd0542-160:~/kiso2-2018/ex11$ ./ex11-7
n? -1
t180900@s01cd0542-160:~/kiso2-2018/ex11$ ./ex11-7
n? 0
0! = 1
t180900@s01cd0542-160:~/kiso2-2018/ex11$ ./ex11-7
n? 1
1! = 1
t180900@s01cd0542-160:~/kiso2-2018/ex11$ ./ex11-7
n? 2
2! = 2
t180900@s01cd0542-160:~/kiso2-2018/ex11$ ./ex11-7
n? 3
3! = 6
t180900@s01cd0542-160:~/kiso2-2018/ex11$ ./ex11-7
n? 10
10! = 3628800
t180900@s01cd0542-160:~/kiso2-2018/ex11$ ./ex11-7
n? 19
19! = 109641728
ソースファイルで定義されたC言語の関数は、その関数が呼び出されると定義に基づいた関数の実体(コピー)がメモリ上に作成・処理され、またその関数呼び出しが終了するとその実体もメモリ上から開放(消去)されます。したがって、定義された関数は、プログラム上から(異なる実体として)複数同時に呼び出すことが可能です。そのため、この演習問題のようにその関数の中で自分自身を呼び出すこともできます。このような入れ子の関数呼び出しを「再帰呼び出し」といいます。
  • lecture/kiso2/ex/ex11-7.c.1569212674.txt.gz
  • 最終更新: 2019/09/23 13:24
  • by sano