鱼C论坛

 找回密码
 立即注册
查看: 2078|回复: 2

[已解决]斐波那契数列的展示代码

[复制链接]
发表于 2019-1-16 21:09:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 瓜瓜咚 于 2019-1-16 21:09 编辑

各位大神,求助这个代码为什么无法正确展示斐波那契数列?想了很久没想出原因……
  1. #include <stdio.h>

  2. int FBLQ(int n)
  3. {
  4.         if (n == 1 || n == 2)
  5.                 return 1;
  6.         printf("%d", FBLQ(n - 1) + FBLQ(n - 2));
  7. }

  8. int main()
  9. {
  10.         int i;
  11.         printf("请输入您要展示的数列个数:");
  12.         scanf("%d", &i);
  13.         FBLQ(i);

  14.         return 0;
  15. }
复制代码
最佳答案
2019-1-17 10:00:44
本帖最后由 sunrise085 于 2019-1-17 10:18 编辑

你的程序有两个问题,第一个,FBLQ函数,在n>2的时候没有return值,是不对的。第二个,递归调用不应该在函数中printf打印,这样会对此重复打印。我帮你修改了一下程序,你看看。
先看看在递归里面打印的程序:
  1. #include <stdio.h>
  2. int FBLQ(int n)
  3. {
  4.     int fb=1;
  5.     if (n>2)
  6.             fb=FBLQ(n - 1) + FBLQ(n - 2);
  7.     printf("%d ",fb);
  8.     return fb;
  9. }

  10. int main()
  11. {
  12.     int i;
  13.     printf("请输入您要展示的数列个数:");
  14.     scanf("%d", &i);
  15.     FBLQ(i);
  16.     return 0;
  17. }
复制代码

在递归里面打印程序的运行结果:
  1. 请输入您要展示的数列个数:5
  2. 1 1 2 1 3 1 1 2 5
复制代码

下面是我手写的递归过程,编号则是执行顺序。然后得出打印结果。
微信图片_20190117101425.jpg
下面是不在递归中打印的程序。
  1. #include <stdio.h>
  2. int FBLQ(int n)
  3. {
  4.     if (n == 1 || n == 2)
  5.         return 1;
  6.     return FBLQ(n - 1) + FBLQ(n - 2);
  7. }

  8. int main()
  9. {
  10.     int i,j;
  11.     printf("请输入您要展示的数列个数:");
  12.     scanf("%d", &i);
  13.     for(j=1;j<=i;j++)
  14.         printf("%d ",FBLQ(j));
  15.     return 0;
  16. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-1-17 03:21:24 | 显示全部楼层
  1. int FBLQ(int n)
  2. {
  3.         if (n == 1 || n == 2)
  4.                 return 1;
  5.         printf("%d", FBLQ(n - 1) + FBLQ(n - 2));
  6. }
复制代码

n>2的时候你没有返回值啊,默认返回的是printf的返回值
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-17 10:00:44 | 显示全部楼层    本楼为最佳答案   
本帖最后由 sunrise085 于 2019-1-17 10:18 编辑

你的程序有两个问题,第一个,FBLQ函数,在n>2的时候没有return值,是不对的。第二个,递归调用不应该在函数中printf打印,这样会对此重复打印。我帮你修改了一下程序,你看看。
先看看在递归里面打印的程序:
  1. #include <stdio.h>
  2. int FBLQ(int n)
  3. {
  4.     int fb=1;
  5.     if (n>2)
  6.             fb=FBLQ(n - 1) + FBLQ(n - 2);
  7.     printf("%d ",fb);
  8.     return fb;
  9. }

  10. int main()
  11. {
  12.     int i;
  13.     printf("请输入您要展示的数列个数:");
  14.     scanf("%d", &i);
  15.     FBLQ(i);
  16.     return 0;
  17. }
复制代码

在递归里面打印程序的运行结果:
  1. 请输入您要展示的数列个数:5
  2. 1 1 2 1 3 1 1 2 5
复制代码

下面是我手写的递归过程,编号则是执行顺序。然后得出打印结果。
微信图片_20190117101425.jpg
下面是不在递归中打印的程序。
  1. #include <stdio.h>
  2. int FBLQ(int n)
  3. {
  4.     if (n == 1 || n == 2)
  5.         return 1;
  6.     return FBLQ(n - 1) + FBLQ(n - 2);
  7. }

  8. int main()
  9. {
  10.     int i,j;
  11.     printf("请输入您要展示的数列个数:");
  12.     scanf("%d", &i);
  13.     for(j=1;j<=i;j++)
  14.         printf("%d ",FBLQ(j));
  15.     return 0;
  16. }
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
瓜瓜咚 + 5 + 5 + 3 太感谢了,大神写的很详细!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-15 11:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表