zoukankan      html  css  js  c++  java
  • 面试题10:斐波那契数列

    斐波那契数指的是这样一个数列:0、1、1、2、3、5、8、13、21、……
    这个数列从第三个数开始,之后的每一个数都由它前的两数相加得到。

    我们知道在编程中我们可以用递归和迭代两种方法求指定的斐波那契数,但这两种方法各有利弊。

    区别:递归法(时间复杂度O(2^n))写出来的代码可读性强,就相当于把书上的数学公式 翻译成代码,但这种方法效率太慢了,当你求第50个斐波那契数,你的电脑可能得运算十多分钟。而且递归很容易造成栈溢出,每调用一次函数就得开辟一块空间,而求第50个斐波那契数所调用函数的次数是令人发指,同样的那在栈上开辟的空间大小也就可想而知,栈溢出就很正常了。

    迭代法:(时间复杂度O(N))相对而言迭代法的运算效率就高的多了,迭代是通过循环来求的,只要创建3个临时变量,就能很快的求出斐波那契数,而且速度快的一匹(那怕求第100斐波那契数也只是一瞬间的事),但迭代法的代码可读性较弱,而且初学者也不容易写出这种代码。
    ---------------------
    作者:Tianzez
    来源:CSDN
    原文:https://blog.csdn.net/tianzez/article/details/78443321
    版权声明:本文为博主原创文章,转载请附上博文链接!

    下面是代码:

    • 递归法
    int Fab(int n){
        
          if(n == 0)
             return 0;
          if(n == 1)
             return 1;
    
          return Fab(n-1) + Fab(n-2);
    
    }


    • 迭代法
    long long Fibnacci(unsigned n){
        
        int result[2] = {0,1};
        if(n < 2)
            return result[n];
    
        long long fibNMinusOne = 0;
        long long fibNMinusTwo = 1;
        long long fibN = 0;
        for(int i = 2;i <= n;i++){
            fibN = fibNMinusOne + fibNMinusTwo;
            fibNMinusOne = fibNMinusTwo;
            fibNMinusTwo = fibN;
    
        }
    
    }
  • 相关阅读:
    C#.NET 超大文件上传和断点续传的实现
    Linux下arp用法
    daf简记
    Linux route命令详解和使用示例(查看和操作IP路由表)
    CMake使用之一
    Crontab的格式
    linux 单网卡绑定两个ip
    云计算与虚拟化以及IaaS, PaaS和SaaS
    shell中判断用法
    解决screen Cannot open your terminal '/dev/pts/1'问题
  • 原文地址:https://www.cnblogs.com/ovs98/p/9879702.html
Copyright © 2011-2022 走看看