zoukankan      html  css  js  c++  java
  • 剑指Offer——斐波那契数列

    题目描述:

    大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39


    分析:

    递归解法肯定相当耗时。

    因为当n=4时,程序是这样子递归运算的:
    Fibonacci(4) = Fibonacci(3) + Fibonacci(2);
    = Fibonacci(2) + Fibonacci(1) + Fibonacci(1) + Fibonacci(0);
    = Fibonacci(1) + Fibonacci(0) + Fibonacci(1) + Fibonacci(1) + Fibonacci(0);

    Fibonacci(0),Fibonacci(1)被重复调用好多次,可从加法的次数看出递归次数,如果n很大时,那么递归的次数将会更多。所以我们不用递归的解法。

    根据斐波那契数列的特征,我们只需由f[0],f[1]求出f[2],然后由f[1],f[2]求出f[3],这样子就减少了之前每步递归都要递归到f[0],f[1]所需的次数,直接可由前两个数得出。

    不过我们不必开辟O(n)的空间大小来存储f[n],我们只需要两个值存储一前一后的值,循环就可得出结果。


    代码:

     1 class Solution {
     2 public:
     3     int Fibonacci(int n) {
     4         if(n < 2) return n;
     5         int a = 0, b = 1;   // a是b的前一个值
     6         for(int i = 2; i <= n; i++) {   // 循环后移求出下一个b值,a一直是b的前一个值
     7             b += a; // 求出下一个值
     8             a = b - a;  // a等于之前的b值
     9         }
    10         return b;
    11     }
    12 };
  • 相关阅读:
    linux 安装python3
    phoenix 索引实践
    spark shuffle参数调优
    hbase 面试问题汇总
    sqlserver 自动初始化从节点数据
    hive sql 窗口函数
    数据仓库建模
    Spark DataFrame简介(二)
    list删除时java.util.ConcurrentModificationException
    mybatis中判断等于字符串的条件怎么写
  • 原文地址:https://www.cnblogs.com/jacen789/p/7742771.html
Copyright © 2011-2022 走看看