[剑指offer]面试题9:斐波那契数列
面试题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:斐波那契数列相关推荐
- 剑指Offer - 面试题10- I. 斐波那契数列
文章目录 1. 题目 2. DP解题 3. 面试题 08.01. 三步问题 4. LeetCode 509. 斐波那契数 1. 题目 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 ...
- python剑指offer面试题_剑指offer面试题Q10 斐波那契数列 python解法
Q10.斐波那契数列 题目描述 写一个函数,输入n,求斐波那契数列的第n项. 解题思路 思路一 递归 递归很简单但是并不能AC python实现代码 class Solution: def Fibon ...
- 剑指offer面试题10- I. 斐波那契数列
题目描述 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项.斐波那契数列的定义如下: 思路 详见链接 代码 class Solution:def fib(self,n:int) ...
- 剑指offer(7)斐波那契数列
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项. n<=39 题目分析 我们都知道斐波那契可以用递归,但是递归重复计算的部分太多了(虽然可以通过),但是这 ...
- 剑指offer面试题[9]-裴波那契数列
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项. n<=39 分析: 虽然在学递归函数时,会用斐波那契数列作为例子,但这并不能说明递归的解法最合适这个题目 ...
- 剑指offer Leetcode 10 I .斐波那契数列
解法1:效率低的解法 复杂度 速度十分缓慢,重复计算太多 代码 //未考虑溢出和取模 class Solution {public:int fib(int n) {if(n <= 0)retur ...
- 【剑指offer-Java版】09斐波那契数列
斐波那契数:比较简单,但是重点是讲效率的求解出来 简单的使用两个临时变量大大减少了重复计算 对于非常大的数如果使用long 来表示,那么 第100项左右就会发生溢出 换了BigInteger,理论上是 ...
- 剑指offer:面试题10- I. 斐波那契数列
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项.斐波那契数列的定义如下: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 ...
- 面试题 (斐波那契数列,复杂度为线性)
来自网易的一道看似简单的笔试题 题目:要求以线性时间复杂度实现斐波那契数列. 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...... 众所周知的斐波那契实现方式为递归 ...
- 【博客搬家旧文】剑指offer [ java ] 面试题10 斐波那契数列
契波那契数列最常见的解法,递归如下: public class Solution {public int Fibonacci(int n) {if(n == 0)return 0;else if(n ...
最新文章
- 对python源码进行编译,加密python脚本
- UVa11292 - Dragon of Loowater(贪心)
- 多个公证员提高网络吞吐量
- 华为API战略:规范、组织和流程驱动企业大循环
- Java内部类相关问题的总结与体会
- 判断点在多边形内部的方法(Java版)
- 超级好用很少人知道的5款小众软件,建议收藏转发
- SeetaFace人脸识别系统
- 未来新一代计算机发展趋势有,未来新一代计算机的代表有()。
- 蛋白组学搜库分析软件 MaxQuant使用教程
- DBLE分库分表示例
- 软负载和硬负载的区别分析
- Google Indexing API 推送 (避免踩坑)
- 每日一言 api 接口
- 【超融合】超融合“火不火”?
- 2022 CCF中国软件大会(CCF ChinaSoft)“CCF-华为胡杨林基金-软件工程专项”论坛成功召开...
- [2019红帽杯]easyRE1题解
- .Net Framework OleDb 数据提供程序要求 Microsoft Data Access Components(MDAC) 2.6 或更高版本。发现当前安装的版本是 2.50.4403.
- 查询手机所在地理位置的简单方法
- Kotlin协程之Dispatchers原理
热门文章
- Android之状态栏通知Notification、NotificationManager详解
- 栈与队列之用java实现队列
- Android之如何解决Listview里面的值出现了2次
- linux下覆盖文件命令,在Linux中使用命令行进行文件覆盖的操作
- 数据库oracle 别名不能更新,数据库oracle改成mysql后Hibernate不能使用别名问题
- 计算机一级b和小高考,2021年小高考B是几分相关内容
- 花季少女竟然有个三年级老公??!
- 超越Linux!华为鸿蒙明年将成“第五大操作系统”,网友:何时超过iOS?
- 你被这些网络迷题难倒过吗?
- 接好!畅销数学界的科普书,我们免费送!