用递归方法求斐波那契数列的2,2,4,6,10,16,26,42,68,110······的第10项
答案:2 悬赏:40 手机版
解决时间 2021-01-28 08:18
- 提问者网友:末路
- 2021-01-27 14:08
用递归方法求斐波那契数列的2,2,4,6,10,16,26,42,68,110······的第10项
最佳答案
- 五星知识达人网友:狂恋
- 2021-01-27 14:40
#include "stdio.h"
int fib(unsigned int n);
int main()
{
int m=10;
int result =0;
result = fib(10);
printf("fib(%d)=%d",m,result);
return 0;
}
int fib(unsigned int n)
{
if(n==1||n==2)
return 1;
else
return fib(n-1)+fib(n-2);
}
没写注释,其实难理解的也就是return fib(n-1)+fib(n-2);这一句,还有就是,递归调用看起来高端,其实效率低下,函数的执行在栈里面越调用越耗内存,不信你求个fib(2000),我可不敢把这函数在电脑里跑。
int fib(unsigned int n);
int main()
{
int m=10;
int result =0;
result = fib(10);
printf("fib(%d)=%d",m,result);
return 0;
}
int fib(unsigned int n)
{
if(n==1||n==2)
return 1;
else
return fib(n-1)+fib(n-2);
}
没写注释,其实难理解的也就是return fib(n-1)+fib(n-2);这一句,还有就是,递归调用看起来高端,其实效率低下,函数的执行在栈里面越调用越耗内存,不信你求个fib(2000),我可不敢把这函数在电脑里跑。
全部回答
- 1楼网友:低音帝王
- 2021-01-27 15:54
方法1:
#include "stdio.h"
int fbnq(int d1,int d2,int n)
{
int k;
if(n>3)
{
printf("%d,",d2);
return fbnq(d2,d1+d2,n-1);
}
else
{
printf("%d,",d2);
return d1+d2;
}
}
int main()
{
int d1,d2,n;
d1=2;d2=2;n=10;
printf("%d,",d1);
printf("%d",fbnq(d1,d2,10));
}
方法2:
#include "stdio.h"
int fbnq(int d[],int n)
{
int k;
if(n>3)
{
printf("%d,",d[0]+d[1]);
d[1]=d[0]+d[1];d[0]=d[1]-d[0];
return fbnq(d,n-1);
}
else
return d[0]+d[1];
}
int main()
{
int d[2],n;
d[0]=2;d[1]=2;n=10;
printf("%d,%d,",d[0],d[1]);
printf("%d",fbnq(d,10));
}
#include "stdio.h"
int fbnq(int d1,int d2,int n)
{
int k;
if(n>3)
{
printf("%d,",d2);
return fbnq(d2,d1+d2,n-1);
}
else
{
printf("%d,",d2);
return d1+d2;
}
}
int main()
{
int d1,d2,n;
d1=2;d2=2;n=10;
printf("%d,",d1);
printf("%d",fbnq(d1,d2,10));
}
方法2:
#include "stdio.h"
int fbnq(int d[],int n)
{
int k;
if(n>3)
{
printf("%d,",d[0]+d[1]);
d[1]=d[0]+d[1];d[0]=d[1]-d[0];
return fbnq(d,n-1);
}
else
return d[0]+d[1];
}
int main()
{
int d[2],n;
d[0]=2;d[1]=2;n=10;
printf("%d,%d,",d[0],d[1]);
printf("%d",fbnq(d,10));
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯