C言語で100の階乗を求めると驚きの結果になる。

C言語を普段書いてない人が、下記のコードを見て一瞬でバグを見抜けるでしょうか?
#include <stdio.h>

int kaijo(int);

int main()
{
    int i;

    for (i = 0; i <= 100 ; i++) {
        printf("%d! = %d\n", i, kaijo(i));
    }

    return 0;
}

int kaijo(int n)
{
    if (n == 0) {
        return 1;
    }

    return n * kaijo(n-1);
}

実行結果

0! = 1
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
7! = 5040
8! = 40320
9! = 362880
10! = 3628800
11! = 39916800
12! = 479001600
13! = 1932053504
14! = 1278945280
15! = 2004310016
16! = 2004189184
17! = -288522240
18! = -898433024
19! = 109641728
20! = -2102132736
21! = -1195114496
22! = -522715136
23! = 862453760
24! = -775946240
25! = 2076180480
26! = -1853882368
27! = 1484783616
28! = -1375731712
29! = -1241513984
30! = 1409286144
31! = 738197504
32! = -2147483648
33! = -2147483648
34! = 0
35! = 0
36! = 0
37! = 0
38! = 0
39! = 0
40! = 0
....
100! = 0
すごい結果に・・・!
何の警告もエラーも出ずに暴走を続けてしまうところがすごいw

まあコンピュータちゃんに言わせてみれば間違ったことは何もしていなくて、プログラマの指示通りに動いた結果がコレなんでしょうけど、人間の立場から言えばその辺空気を読んでうまいことやってくれよと言いたくなります。

こういうのを見ると、C言語はやはりコンピュータよりの低級言語なんだなあと実感しますね。
C言語かわいいよC言語
カテゴリ: