斐波那契数列的递归实现
int f(int n)
{
if (n > 0)
{
//int a = 1, b = 1, c;
if (1 == n)
return 1;
if (2 == n)
return 1;
return f(n - 1) + f(n - 2);
}
return -1;
}
斐波那契数列的循环实现
int f(int n)
{
int a = 1;
int b = 1;
int c,i;
for (i = 3; i <= n; i++)
{
c = a + b;
a = b;
b = c;
}
return b;//注意一定要返回b
}
采用递归虽然简洁一点,但是递归由于是函数调用自己,而函数调用是有时间和空间消耗的:每一次函数调用,都需要在内存栈中分配空间以保存参数,返回地址及临时变量,而且往栈里压入数据和弹出数据都需要时间。斐波那契数列数列递归算法中有许多是重复计算的,当n = 6的时候,得先计算f(5)的时候要把f(1),f(2),f(3),f(4)算一遍,计算f()的时候又得把<span style="font-family: Arial, Helvetica, sans-serif;">f(1),f(2),f(3)再重新算一遍。随着n的增大,重复的节点会急剧增加,造成效率低,还有可能造成更严重的问题:调用栈溢出</span>
<span style="font-family: Arial, Helvetica, sans-serif;">所以斐波那契数列实现最好采用非递归的方式。</span>