鱼C论坛

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

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

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

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

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

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;
}
最佳答案
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 
下面是我手写的递归过程,编号则是执行顺序。然后得出打印结果。
微信图片_20190117101425.jpg
下面是不在递归中打印的程序。
#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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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的返回值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 
下面是我手写的递归过程,编号则是执行顺序。然后得出打印结果。
微信图片_20190117101425.jpg
下面是不在递归中打印的程序。
#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荣誉 +5 鱼币 +5 贡献 +3 收起 理由
瓜瓜咚 + 5 + 5 + 3 太感谢了,大神写的很详细!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-3 04:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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