剑指offer 9---斐波那契数列
来源:互联网 发布:微信清死粉软件安卓版 编辑:程序博客网 时间:2024/06/07 01:47
题目:
写一个函数,输入n,求斐波那契数列的第n项。
解1:递归实现斐波那契数列
#include <iostream>#include <Windows.h>using namespace std;int Fibonacci(int n) //递归实现斐波那契数列{if (n <= 0){return 0;}if (n == 1){return 1;} return (Fibonacci(n - 1) + Fibonacci(n - 2));}int main(){cout << Fibonacci(8) << endl;system("pause");return 0;}
解析:
该题使用递归算法求解,有严重的效率问题,不断递归的过程中需要重复计算很多点的值,可见n比较大时,很容易造成栈溢出,所以不建议使用。
解2:非递归实现斐波那契数列
PS:
该题使用非递归求解时不会有很多次重复计算,效率比递归算法要快,且没有栈溢出问题。
时间复杂度:O(n)
int Fibonacci(int n) //递归实现斐波那契数列{if (n <= 0){return 0;}if (n == 1){return 1;}int n1 = 0;int n2 = 1;int n3 = 0;while (n > 1){n3 = n2 + n1;n1 = n2;n2 = n3;n--;}return n3;}int main(){cout << Fibonacci(8) << endl;system("pause");return 0;}
扩展题目:青蛙跳台阶
一只青蛙一次可以跳上一级台阶,也可以跳上两级,求该青蛙跳上N级台阶有多少种跳法?
解析:
N=1时,只有一种跳法
N=2时,一次跳两级+一次跳一级 所以有2种跳法
N=3时,一次跳一级+2种一次跳两级的方法 所以有3种跳法 f(3)=f(1)+f(2)
.......
不难看出这还是斐波那契数列(数学问题,自己找规律),即f(n)=f(n-1)+f(n-2)
阅读全文
3 0
- 【剑指offer】斐波那契数列
- 剑指offer--斐波那契数列
- 剑指Offer-斐波那契数列
- 剑指offer:斐波那契数列
- 《剑指offer》斐波那契数列
- 剑指 offer:斐波那契数列
- 【剑指Offer】斐波那契数列
- 剑指offer 斐波那契数列
- 【剑指offer】斐波那契数列
- 剑指offer 斐波那契数列
- [剑指offer]斐波那契数列
- 剑指offer|斐波那契数列
- 【剑指offer】斐波那契数列
- 剑指offer--斐波那契数列
- 剑指Offer:斐波那契数列
- 《剑指Offer》斐波那契数列
- 剑指offer----斐波那契数列
- 剑指offer-斐波那契数列
- fonts.googleapis.com响应时间过长的解决方法
- 读书笔记
- Angular 实现类似博客获取回复评论的数据
- 《数据库SQL实战》获取所有非manager的员工emp_no
- apache-comnons系列之commons-imaging1.0 学习笔记
- 剑指offer 9---斐波那契数列
- 生活本就是点点滴滴,没有积累便容易忘记
- 第九章项目人力资源管理
- 数据结构10:二叉树专题
- JavaScript将指定的元素对象移动到固定的距离函数封装
- 在 Linux 系统上安装主播软件
- CSU-ACM2017暑期训练6-bfs Mike and Shortcuts
- 在TP驱动中添加虚拟按键
- 腾讯js面试题3