用递归实现打印第n个Fibonacci数列

#include<stdio.h>

int main()
{
    unsigned long F[100]={0,1},fn;
    int n;
    unsigned long recursion(int x,unsigned long F[]);
    
    printf("请输入一个整数n(0<x<100),输出斐波那契数列的第n数!\n");
    scanf("%d",&n);
    fn=recursion(n,F);
    printf("第%d数Fn=%lu",n,fn);
}
unsigned long recursion(int x,unsigned long F[])
{
    if(x>0+2)
    {
            F[x]=recursion(x-1,F)+recursion(x-2,F);
            //n>2时,Fn=F(n-1)+F(n-2) 
    }
    else if(x=2)
    {
        F[x]=F[x-1]+F[x-2];
    }
    return F[x];//返回上一次函数 
}

计算第50个的时候用了2分多钟。我还以为哪里出错了没运行呢,看了一下CPU,发现在计算运行

一开始long长整型都不够用了,显示出来是负的,显示不完整


斐波那契显示不完整.jpg


然后用了无符号unsigned long长整型


斐波那契.jpg

刚才运行花了2分钟,经过大佬指点

问题在执行过程中的:

F[x]=recursion(x-1,F)+recursion(x-2,F);

时进行了两次函数递归,每一次递归就要运行2次。
就像 1乘1乘1乘1乘1乘1乘1...... 被我两次计算,变成了 2乘2乘2乘2乘2乘2......
你们说计算哪个快
,计算次数很多导致运行缓慢

在进行recursion(x-1,F)递归时已经计算出了
F【x-1】=F【x-2】+F【x-3】
F【x-2】=F【x-3】+F【x-4】
...以此类推,递归回去,直到不满足X>2的条件

在此可以看出其实F【x-2】是计算过了一遍了的

所以只要把F【x-2】调用出来就行,
免去的再次计算步骤,

F[x]=recursion(x-1,F)+F[x-2];

然后一试,MD真的快了好多好多,同样是输出第50个数只花了不到1秒的时间

#include<stdio.h>

int main()
{
    unsigned long F[100]={0,1},fn;
    int n;
    unsigned long recursion(int x,unsigned long F[]);
    
    printf("请输入一个整数n(0<x<100),输出斐波那契数列的第n数!\n");
    scanf("%d",&n);
    fn=recursion(n,F);
    printf("第%d数Fn=%lu",n,fn);
}
unsigned long recursion(int x,unsigned long F[])
{
    if(x>0+2)
    {
            F[x]=recursion(x-1,F)+F[x-2];
            //n>2时,Fn=F(n-1)+F(n-2) 
    }
    else if(x=2)
    {
        F[x]=F[x-1]+F[x-2];
    }
    return F[x];//返回上一次函数 
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,298评论 6 13
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,270评论 30 472
  • 最近的生活作息越来越不规律,晚上十二点一过,用什么方法也不能入睡。索性点一支香烟,望着窗外的夜景发呆,思绪飞扬,忆...
    郭家二少阅读 183评论 2 3
  • 夜读:谈保险 记得一个很要好的同学做平安保险,我问:为何做保险?她答:“我只是希望通过我做保险的经历,提升我...
    阿毅阅读 506评论 5 11
  • 这个孩子,叫昊。 今晚昊不在,想说一说我跟昊的故事! 第一天,早晨,有雨,我见昊在用笔画一些什么,他见了我,大声说...
    请叫我郑老师阅读 549评论 4 4