递归实现求第n个斐波那契数:
#include<stdio.h>
int fib(int n)
{
if (n <= 2)
return 1;
else
return fib(n - 1) + fib(n - 2);
}
int main()
{
int n=0;
scanf("%d", &n);
int f=fib(n);
printf("%d\n", f);
return 0;
}
优点:代码简洁,思路清晰
缺点:重复计算,效率低下
当我们n输⼊为50的时候,需要很⻓时间才能算出结果,这个计算所花费的时间,是我们很难接受的, 这也说明递归的写法是⾮常低效的,那是为什么呢?
其实递归程序会不断的展开,在展开的过程中,我们很容易就能发现,在递归的过程中会有重复计 算,⽽且递归层次越深,冗余计算就会越多。
非递归实现求第n个斐波那契数:
#include<stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
//起始的两个数
int a = 1;
int b = 1;
//第n个斐波那契数
int c = 1;
while (n>2)
{
c = a + b;
a = b;
b = c;
n--;
}
printf("%d", c);
return 0;
}
优点:效率高
缺点:相对于递归,思路并没有那么清晰