一、题目:
递归和非递归分别实现求第n个斐波那契数。
二、解题思路:
先了解下斐波拉契数列 (1 1 2 3 5 8 13 21 34 55···),第n个斐波那契数等于(n-1)个斐波那契数加上(n-2)个斐波那契数,已知第一个斐波那契数为1。
三、知识点解析:
1、递归实现过程
2、函数调用(后期专门更新一次博客。敬请期待!)
四、代码:
1、非递归代码:
#include<stdio.h>
int main ()
{
int n = 0;
int a = 0;
int b = 1;
int c = 1;
int i = 1;
scanf("%d",&n);
while(i<n)
{
c=a+b;
a=b;
b=c;
i++;
}
printf("%d\n",c);
return 0;
}
2、递归法代码:
#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;
int ret = 0;
printf("请问需要第几个斐波拉契数?\n>:");
scanf("%d",&n);
ret = fib(n);
printf("第 %d 个斐波拉契数为>:%d\n",n,ret);
return 0;
}
五、运行结果
六、神叨叨,递归使用很是方便,是代码也很简洁,代码量减少,但是有个致命的缺点调用次数太频繁,计算机计算时间长。此题当你求第50个斐波那契数 大概需要1小时。而你用非递归不到一分钟就ok了。所以大家在用递归一定要思考清楚,是否得当。