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

    题目

    大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。

    n<=39

    解题思路

    菲波那切数列是最经典的用来做递归举例的案例,但是用菲波那切数列的复杂度为2的指数次方,时间复杂度非常高,当n很大时还会造成栈溢出

    分析求解过程

    可以看到很多节点的值被重复计算了,因此我们可以采用自下而上用循环的方式保存上一次计算的值避免重复计算,由f(0)、f(1)计算出f(2),由f(1)、f(2)计算出f(3)

    由此类推,则时间复杂度为O(n)

    代码

    思路一:递归

    1     public int Fibonacci(int n) {
    2         if(n==0 ||n==1)
    3             return n;
    4         else{
    5             return Fibonacci(n-1)+Fibonacci(n-2);
    6         }
    7     }

    思路二:循环

     1     public int Fibonacci(int n) {
     2         if(n==0){
     3             return 0;
     4         }
     5         int fibMinusOne = 1,fibMinusTwo = 0;
     6         for(int i=1;i<n;i++){
     7             int tmp = fibMinusOne;
     8             fibMinusOne = fibMinusOne + fibMinusTwo;
     9             fibMinusTwo = tmp;
    10         }
    11         return fibMinusOne;
    12     }
  • 相关阅读:
    【面试】Java基础
    GC
    【面试】JVM
    Spooling技术
    数据结构之 平衡二叉树
    二叉树应用
    LINUX设备驱动模型之class
    RTC(x86)
    微内核和单内核
    Linux内核的五大模块
  • 原文地址:https://www.cnblogs.com/huanglf714/p/11069624.html
Copyright © 2011-2022 走看看