作为几个月前的一个笑话,我的一位同事试图通过使用这种指数算法计算斐波那契数来“加速宇宙的热寂”:
int Fib(int n)
{
if (n <= 1)
return 1;
else
return Fib(n - 1) + Fib(n - 2);
}
这如何不会导致 C# 中的堆栈溢出?我们在放弃之前设法到达了 Fib(52)(而 Fib(51) 花了很多时间)。我认为这会严重影响堆栈以导致堆栈溢出,因为默认情况下 CLR 仅分配 1M 给堆栈。另外,我很确定这也不符合尾递归的条件。