剑指offer-面试题9.斐波拉契数列
题目一:写一个函数,输入n,求斐波拉契数列的第n项。
斐波拉契数列的定义如下:
{ n=;
f(n)={ n=;
{ f(n-)+f(n-) n>;
斐波拉契问题很明显我们会想到用递归来解决:
long long Fibonacci(unsigned int n)
{
if(n==)
return ;
if(n==)
return ; if(n>)
return Fibonacci(n-)+Fibonacci(n-);
}
这道题用递归解决思路很清晰,代码很简单,那么问题来了
根据马克思辩证主义思想,往往简单的思路会带来较大的
时间空间开销。在这种递归计算的过程中往往会计算很多
重复的项,比如计算f(6)时就需要计算f(5),f(4),计算f(5)时
会计算f(4),f(3)然而f(4)在之前计算f(6)的过程中就已经计算
过了。看似这不会带来很大的开销,但是我们这样想一想
斐波拉契中的每个数的计算都由两个数组成,然而这两个数
中就有一个是已重复计算了,相当于计算时间增加了1倍,效率
降低了一倍。
下面我们用非递归解法来解这道题:
#include <iostream>
using namespace std; long Fibonacci(unsigned int n)
{
long int answer[]={,};
if(n<)
return answer[n]; long int nums2=;
long int nums1=;
long int ans=; for(int i=;i<=n;i++)
{
ans=nums2+nums1;
nums1=nums2;
nums2=ans;
}
return ans;
} int main()
{
unsigned int data;
cout<<"Input the n: ";
cin>>data; cout<<"The answer is: "<<Fibonacci(data)<<endl;
return ;
}
运行截图:

当然剑指Offer一书还提到了另外两种方法:
1.由于在计算的时候有重复项,那么我们可以保存计算的中间项,当计算的时候如果找到
已经计算的重复项则不必重复计算
2.另外一种方法是时间复杂度为logn的方法,这种方法具体可以参考剑指offer一书。
剑指offer-面试题9.斐波拉契数列的更多相关文章
- 【剑指offer】9、斐波拉契数列
面试题9.斐波拉契数列 题目: 输入整数n,求斐波拉契数列第n个数. 思路: 一.递归式算法: 利用f(n) = f(n-1) + f(n-2)的特性来进行递归,代码如下: 代码: long long ...
- 剑指Offer - 九度1387 - 斐波那契数列
剑指Offer - 九度1387 - 斐波那契数列2013-11-24 03:08 题目描述: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项.斐波那契数列的定义如下: ...
- 【剑指offer】7:斐波那契数列
题目描述: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1).假设 n≤39 解题思路: 斐波拉契数列:1,1,2,3,5,8--,总结 ...
- 剑指offer第二版-10.斐波那契数列
面试题10:斐波那契数列 题目要求: 求斐波那契数列的第n项的值.f(0)=0, f(1)=1, f(n)=f(n-1)+f(n-2) n>1 思路:使用循环从下往上计算数列. 考点:考察对递归 ...
- 剑指offer【07】- 斐波那契数列(java)
题目:斐波那契数列 考点:递归和循环 题目描述:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0),n<=39. 法一:递归法,不过递归比较慢, ...
- 剑指offer(7)斐波那契数列
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项. n<=39 题目分析 我们都知道斐波那契可以用递归,但是递归重复计算的部分太多了(虽然可以通过),但是这 ...
- 【剑指Offer】7、斐波那契数列
题目描述: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0).假设n<=39. 解题思路: 斐波那契数列:0,1,1,2,3, ...
- 剑指offer——矩阵覆盖(斐波那契变形)
****感觉都可以针对斐波那契写一个变形题目的集合了****** 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? cl ...
- 【剑指offer】面试题 10. 斐波那契数列
面试题 10. 斐波那契数列 题目一:求斐波那契数列的第n项 题目描述:求斐波拉契数列的第n项 写出一个函数,输入n,求斐波拉契(Fibonacci)数列的第n项.斐波拉契数列定义如下: C++ 实现 ...
随机推荐
- (转)Apache+Tomcat集群配置
本文Apache+Tomcat集群配置 基于最新的Apache和Tomcat,具体是2011年4月20日最新的Tomcat和Apache集群和负载均衡配置. 准备环境 Apache Apache是ht ...
- Arithmetic Sequence(dp)
Arithmetic Sequence Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 51 Solved: 19[Submit][Status][We ...
- RDBMS 数据库补丁集补丁号码高速參考-文档 ID 1577380.1
保存此文,高速查询补丁号 Oracle Database - Enterprise Edition - 版本号 8.1.7.0 和更高版本号 本文档所含信息适用于全部平台 补丁集/PSU 补丁号码 ...
- Android设备内存和SD卡操作工具类
package cc.c; import java.io.File; import java.util.List; import android.os.StatFs; import java.io.F ...
- [R语言画图]气泡图symbols
绘制气泡图主要使用函数symbols(x,y,circle=r).当中x.y是坐标轴,r是每一个点的半径. x<-rnorm(10) y<-rnorm(10) r<-abs(rnor ...
- [Regex Expression] Tagline --- {0, } {1,10}
Using a character set repeated 1 or more times, make a pattern to search for strings that do not con ...
- Android窗口管理服务WindowManagerService对窗口的组织方式分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8498908 我们知道,在Android系统中, ...
- chart.js制作折线图
<!DOCTYPE html> <html> <head> <title></title> </head> <script ...
- Hacker(14)----扫描目标计算机端口
端口是目前计算机与外界的通道,因而黑客一旦锁定目标计算机,便会扫描该计算机中已经开放的端口,从而得到更多的有用信息.扫描目标计算机端口一般使用SuperScan.X-Scan等. 一.端口扫描原理 扫 ...
- zabbix-web界面图形中文乱码解决方法
1.搜索windows-server X86-64机器上C:/windows/fonts的simkai.tts文件,windows7下有时候不行. 2.把它拷贝到zabbix的web端的fonts目录 ...