面试题9:斐波那契数列
题目一:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项。斐波那契数列的定义如下:


❖ 效率很低的解法,挑剔的面试官不会喜欢

代码如下:

long long fib(unsigned int n)
{if (n <= 0) return 0;if (n == 1) return 1;return fib(n - 1) + fib(n - 2);
}

❖ 面试官期待的实用解法

其实改进的方法并不复杂。上述递归代码之所以慢是因为重复的计算太多,我们只要想办法避免重复计算就行了。
比如我们可以把已经得到的数列中间项保存起来,如果下次需要计算的时候我们先查找一下,如果前面已经计算过就不用再重复计算了。

更简单的办法是从下往上计算,首先根据f(0)和f(1)算出f(2),再根据f(1)和f(2)算出f(3)……依此类推就可以算出第n 项了。很容易理解,这种思路的时间复杂度是O(n)。

实现代码如下:

#include <iostream>
using namespace std;
typedef long long LL;LL fib(unsigned int n)
{int res[2] = { 0,1 };if (n < 2) return res[n];LL fibminone = 1;LL fibmintwo = 0;LL fibN = 0;for (unsigned int i = 2; i <= n; i++){fibN = fibminone + fibmintwo;fibmintwo = fibminone;fibminone = fibN;}return fibN;
}

测试用例:
● 功能测试(如输入3、5、10等)。
● 边界值测试(如输入0、1、2)。
● 性能测试(输入较大的数字,如40、50、100等)。
本题考点:
● 考查对递归、循环的理解及编码能力。
● 考查对时间复杂度的分析能力。
● 如果面试官采用的是青蛙跳台阶的问题,那同时还在考查应聘者的数学建模能力。

[剑指offer]面试题9:斐波那契数列相关推荐

  1. 剑指Offer - 面试题10- I. 斐波那契数列

    文章目录 1. 题目 2. DP解题 3. 面试题 08.01. 三步问题 4. LeetCode 509. 斐波那契数 1. 题目 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 ...

  2. python剑指offer面试题_剑指offer面试题Q10 斐波那契数列 python解法

    Q10.斐波那契数列 题目描述 写一个函数,输入n,求斐波那契数列的第n项. 解题思路 思路一 递归 递归很简单但是并不能AC python实现代码 class Solution: def Fibon ...

  3. 剑指offer面试题10- I. 斐波那契数列

    题目描述 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项.斐波那契数列的定义如下: 思路 详见链接 代码 class Solution:def fib(self,n:int) ...

  4. 剑指offer(7)斐波那契数列

    题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项. n<=39 题目分析 我们都知道斐波那契可以用递归,但是递归重复计算的部分太多了(虽然可以通过),但是这 ...

  5. 剑指offer面试题[9]-裴波那契数列

    题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项. n<=39 分析: 虽然在学递归函数时,会用斐波那契数列作为例子,但这并不能说明递归的解法最合适这个题目 ...

  6. 剑指offer Leetcode 10 I .斐波那契数列

    解法1:效率低的解法 复杂度 速度十分缓慢,重复计算太多 代码 //未考虑溢出和取模 class Solution {public:int fib(int n) {if(n <= 0)retur ...

  7. 【剑指offer-Java版】09斐波那契数列

    斐波那契数:比较简单,但是重点是讲效率的求解出来 简单的使用两个临时变量大大减少了重复计算 对于非常大的数如果使用long 来表示,那么 第100项左右就会发生溢出 换了BigInteger,理论上是 ...

  8. 剑指offer:面试题10- I. 斐波那契数列

    写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项.斐波那契数列的定义如下: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 ...

  9. 面试题 (斐波那契数列,复杂度为线性)

    来自网易的一道看似简单的笔试题 题目:要求以线性时间复杂度实现斐波那契数列. 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...... 众所周知的斐波那契实现方式为递归 ...

  10. 【博客搬家旧文】剑指offer [ java ] 面试题10 斐波那契数列

    契波那契数列最常见的解法,递归如下: public class Solution {public int Fibonacci(int n) {if(n == 0)return 0;else if(n ...

最新文章

  1. 对python源码进行编译,加密python脚本
  2. UVa11292 - Dragon of Loowater(贪心)
  3. 多个公证员提高网络吞吐量
  4. 华为API战略:规范、组织和流程驱动企业大循环
  5. Java内部类相关问题的总结与体会
  6. 判断点在多边形内部的方法(Java版)
  7. 超级好用很少人知道的5款小众软件,建议收藏转发
  8. SeetaFace人脸识别系统
  9. 未来新一代计算机发展趋势有,未来新一代计算机的代表有()。
  10. 蛋白组学搜库分析软件 MaxQuant使用教程
  11. DBLE分库分表示例
  12. 软负载和硬负载的区别分析
  13. Google Indexing API 推送 (避免踩坑)
  14. 每日一言 api 接口
  15. 【超融合】超融合“火不火”?
  16. 2022 CCF中国软件大会(CCF ChinaSoft)“CCF-华为胡杨林基金-软件工程专项”论坛成功召开...
  17. [2019红帽杯]easyRE1题解
  18. .Net Framework OleDb 数据提供程序要求 Microsoft Data Access Components(MDAC) 2.6 或更高版本。发现当前安装的版本是 2.50.4403.
  19. 查询手机所在地理位置的简单方法
  20. Kotlin协程之Dispatchers原理

热门文章

  1. Android之状态栏通知Notification、NotificationManager详解
  2. 栈与队列之用java实现队列
  3. Android之如何解决Listview里面的值出现了2次
  4. linux下覆盖文件命令,在Linux中使用命令行进行文件覆盖的操作
  5. 数据库oracle 别名不能更新,数据库oracle改成mysql后Hibernate不能使用别名问题
  6. 计算机一级b和小高考,2021年小高考B是几分相关内容
  7. 花季少女竟然有个三年级老公??!
  8. 超越Linux!华为鸿蒙明年将成“第五大操作系统”,网友:何时超过iOS?
  9. 你被这些网络迷题难倒过吗?
  10. 接好!畅销数学界的科普书,我们免费送!