前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《剑指offer》第九天:斐波那契数列

《剑指offer》第九天:斐波那契数列

作者头像
程序员小浩
发布2020-08-14 10:48:33
3760
发布2020-08-14 10:48:33
举报
文章被收录于专栏:小浩算法小浩算法

❝问:为什么程序员总是分不清万圣节和圣诞节? 答:因为 Oct 31 == Dec 25。❞

斐波那契数列

题目描述

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

参考资料

解法

解法一

采用递归方式,简洁明了,但效率很低,存在大量的重复计算。

代码语言:javascript
复制
                  f(10)
               /        \
            f(9)         f(8)
          /     \       /    \
       f(8)     f(7)  f(7)   f(6)
      /   \     /   \ 
   f(7)  f(6)  f(6) f(5)
代码语言:javascript
复制

public class Solution {
    /**
     * 求斐波那契数列的第n项,n从0开始
     * @param n 第n项
     * @return 第n项的值
     */
    public int Fibonacci(int n) {
        if (n < 2) {
            return n;
        }
        // 递归调用
        return Fibonacci(n - 1) + Fibonacci(n - 2);
    }
}
解法二

从下往上计算,递推,时间复杂度 O(n)

代码语言:javascript
复制

public class Solution {
    /**
     * 求斐波那契数列的第n项,n从0开始
     * @param n 第n项
     * @return 第n项的值
     */
    public int Fibonacci(int n) {
        if (n < 2) {
            return n;
        }
        int[] res = new int[n + 1];
        res[0] = 0;
        res[1] = 1;
        for (int i = 2; i <= n; ++i) {
            res[i] = res[i - 1] + res[i - 2];
        }
        return res[n];

    }
}

测试用例

  1. 功能测试(如输入 3、5、10 等);
  2. 边界值测试(如输入 0、1、2);
  3. 性能测试(输入较大的数字,如 40、50、100 等)。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小浩算法 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 斐波那契数列
    • 题目描述
      • 参考资料
        • 解法
          • 解法一
          • 解法二
        • 测试用例
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档