私は C を学んでいるので、言語を練習するために C でいくつかの小さな演習を書いています。
関数型コードの経験があるので、再帰が大好きです。C の静的変数を使用して末尾再帰を実現できれば素晴らしいと思います。そのため、追加の引数やヘルパー関数は必要ありません。
再帰を使用して階乗を計算するこのコードは失敗します。
long long int fact(int n)
{
static long long int result = -1;
if(n <= 0) {
if(result < 0)
return 1;
else {
long long int temp = result;
result = -1;
return temp;
}
} else {
result *= n;
fact(n - 1);
}
}
しかし、何らかの理由で、C でこれを行うことはできません。同じイディオムはありますか? それは私のコンパイラだけですか?メモ化はどうですか?
どうもありがとう。