• 剑指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 };
  • 相关阅读:
    oracle体系结构
    Oracle表连接(转)
    Oracle的RBO和CBO
    Linux下安装Tomcat服务器和部署Web应用
    动态创建selectjs 操作select和option
    JS中如何获取<Select>中value和text的值
    原生JavaScript事件详解
    动态添加select的option
    js 动态加载事件的几种方法总结
    js实现select动态添加option
  • 原文地址:https://www.cnblogs.com/jacen789/p/7742771.html
Copyright © 2020-2023  润新知