違うアルゴリズムのfactを比べるという
馬鹿げた習慣はなくならないものか。
本来
int fact(int n) {
if (n == 0) return 1;
else return n * fact(n - 1);
}
と比べるものだ。

このおかしな例のせいで、関数型言語のプログラミングがこういう
非効率なものだと思うようになった人の例をいくつもみたことがある。
まともな関数型言語のプログラマーはfactは必ず末尾再帰にするのだし、
一般的な手続き型言語でも定義の直訳は簡単にできる…