|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 瓜瓜咚 于 2019-1-16 21:09 编辑
各位大神,求助这个代码为什么无法正确展示斐波那契数列?想了很久没想出原因…… - #include <stdio.h>
- int FBLQ(int n)
- {
- if (n == 1 || n == 2)
- return 1;
- printf("%d", FBLQ(n - 1) + FBLQ(n - 2));
- }
- int main()
- {
- int i;
- printf("请输入您要展示的数列个数:");
- scanf("%d", &i);
- FBLQ(i);
- return 0;
- }
复制代码
本帖最后由 sunrise085 于 2019-1-17 10:18 编辑
你的程序有两个问题,第一个,FBLQ函数,在n>2的时候没有return值,是不对的。第二个,递归调用不应该在函数中printf打印,这样会对此重复打印。我帮你修改了一下程序,你看看。
先看看在递归里面打印的程序:
- #include <stdio.h>
- int FBLQ(int n)
- {
- int fb=1;
- if (n>2)
- fb=FBLQ(n - 1) + FBLQ(n - 2);
- printf("%d ",fb);
- return fb;
- }
- int main()
- {
- int i;
- printf("请输入您要展示的数列个数:");
- scanf("%d", &i);
- FBLQ(i);
- return 0;
- }
复制代码
在递归里面打印程序的运行结果:
- 请输入您要展示的数列个数:5
- 1 1 2 1 3 1 1 2 5
复制代码
下面是我手写的递归过程,编号则是执行顺序。然后得出打印结果。
下面是不在递归中打印的程序。
- #include <stdio.h>
- int FBLQ(int n)
- {
- if (n == 1 || n == 2)
- return 1;
- return FBLQ(n - 1) + FBLQ(n - 2);
- }
- int main()
- {
- int i,j;
- printf("请输入您要展示的数列个数:");
- scanf("%d", &i);
- for(j=1;j<=i;j++)
- printf("%d ",FBLQ(j));
- return 0;
- }
复制代码
|
|