瓜瓜咚 发表于 2019-1-16 21:09:13

斐波那契数列的展示代码

本帖最后由 瓜瓜咚 于 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;
}

Croper 发表于 2019-1-17 03:21:24

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:00:44

本帖最后由 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]
查看完整版本: 斐波那契数列的展示代码