讨论一个著名的数列——斐波那契数列(Fibonacci sequence),其第0项为0,第1项为1,从其第2项开始,每一项都为前面两项的和,即:
C语言中,我们很自然能够得出如下的递归代码:
#define var __int64
var Fibonacci2(int n) {
if (n <=1) {
return n;
}
return Fibonacci2(n - 1) + Fibonacci2(n - 2);
}
其中var是由宏定义的,如果为int(4字节)类型,将在第47个数溢出,在其他语言中可能不需要考虑这个问题,这不是我们讨论的重点。该算法效率是指数级的,代码简短带来的问题可能就是性能的低下。读者可以尝试用循环和常数辅助空间实现的算法。下面实现一种