斐波那契数列的展示代码
本帖最后由 瓜瓜咚 于 2019-1-16 21:09 编辑各位大神,求助这个代码为什么无法正确展示斐波那契数列?想了很久没想出原因……{:10_285:} #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;
} int FBLQ(int n)
{
if (n == 1 || n == 2)
return 1;
printf("%d", FBLQ(n - 1) + FBLQ(n - 2));
}
n>2的时候你没有返回值啊,默认返回的是printf的返回值 本帖最后由 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;
}
页:
[1]