有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。 其中,蜂房的结构如下所示。

Ariana_Minaj 2019-11-28 09:19:28
#include<stdio.h>
int f(int n)
{
if(n==2) return 1;
if(n==3) return 2;
return f(n-1)+f(n-2);
}
int main()
{
int a,b,c,n;
scanf("%d",&c);
while(c--)
{
scanf("%d%d",&a,&b);
n=b-a-1;
printf("%d\n",f(n));
}
return 0;
}
内存超限问题怎么解决
...全文
1446 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
不断学习—— 2019-12-12
  • 打赏
  • 举报
回复
引用 4 楼 lin5161678的回复:
[quote=引用 3 楼 weixin_45749653 的回复:] #include<stdio.h> #include<math.h> int main() { int N; scanf("%d",&N); getchar(); while(N--) { int i,j,a,b,c[100]={0},k=0; scanf("%d%d",&a,&b); getchar(); k=abs(a-b); c[0]=0; c[1]=1; c[2]=2; for(i=3;i<=60;i++) c[i]=c[i-1]+c[i-2]; printf("%d\n",c[k]); } return 0; } 那位大佬知道我这个为啥WA?
60太大[/quote] 谢了,我已经知道原因了,若用longlong定义数组c来存储的话就可以顺利AC
lin5161678 2019-12-10
  • 打赏
  • 举报
回复
引用 3 楼 weixin_45749653 的回复:
#include<stdio.h> #include<math.h> int main() { int N; scanf("%d",&N); getchar(); while(N--) { int i,j,a,b,c[100]={0},k=0; scanf("%d%d",&a,&b); getchar(); k=abs(a-b); c[0]=0; c[1]=1; c[2]=2; for(i=3;i<=60;i++) c[i]=c[i-1]+c[i-2]; printf("%d\n",c[k]); } return 0; } 那位大佬知道我这个为啥WA?
60太大
不断学习—— 2019-12-10
  • 打赏
  • 举报
回复
#include<stdio.h> #include<math.h> int main() { int N; scanf("%d",&N); getchar(); while(N--) { int i,j,a,b,c[100]={0},k=0; scanf("%d%d",&a,&b); getchar(); k=abs(a-b); c[0]=0; c[1]=1; c[2]=2; for(i=3;i<=60;i++) c[i]=c[i-1]+c[i-2]; printf("%d\n",c[k]); } return 0; } 那位大佬知道我这个为啥WA?
寻开心 2019-11-28
  • 打赏
  • 举报
回复
用一个循环来替代,递归调用f

f3 = f1 + f2; f1=f2; f2=f3;
f3= f1 + f2; f1=f2; f2=3; // 实际就是f4=f2+f3; 重复利用变量
.....
这样一步一步递推到fn

寻开心 2019-11-28
  • 打赏
  • 举报
回复
int f(int n)
{
if(n==2) return 1;
if(n==3) return 2;
return f(n-1)+f(n-2);
}
把这个函数改造一下, 不要用递归,而是要用递推
递归会占用很大的堆栈空间, 尤其是这个 f(n-1) + f(n-2) 这种多重递归的

33,319

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧