博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(剑指Offer)面试题9:斐波那契数列
阅读量:7284 次
发布时间:2019-06-30

本文共 1553 字,大约阅读时间需要 5 分钟。

题目:

现在要求输入一个整数n,请你输出斐波那契数列的第n项。

斐波那契数列的定义:

f(0)=0;f(1)=1;

f(n)=f(n-1)+f(n-2)

思路:

1、递归:

根据递推公式来实现

优点:代码简单,易懂

缺点:

  • 效率低:函数递归调用过程中需要不断分配栈空间,且不断地入栈出栈,代码执行效率低;
  • 栈溢出:当递归层级太多时,会超出栈容量,导致栈溢出;
  • 复杂度高:递归调用存在大量的重复计算,时间复杂度以n的指数递增。

2、循环:

从下往上计算(动态规划),克服递归出现的缺陷

3、类似问题:

  • 青蛙跳台阶:

(1)一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶,求该青蛙跳上一个n级台阶总共有多少种跳法?

f(n)=f(n-1)+f(n-2)

f(1)=1;

f(2)=2;

(2)一只青蛙一次可以跳上1级,2级。。。n级,此时一只青蛙跳上一个n级的台阶总共有多少种跳法?

f(n)=f(n-1)+f(n-2)*2

f(1)=1;

f(2)=2;

数学归纳法证明:f(n)=2^(n-1)

  • 矩阵覆盖:

我们可以用2*1的小矩阵横着或者竖着去覆盖大的矩形,请问用8个2*1的小矩阵无重叠地覆盖一个2*8的大矩形,总共有多少种方法?

f(n)=f(n-1)+f(n-2)

f(1)=1;

f(2)=2;

代码:

#include 
using namespace std;long long fibonacci_recursively(unsigned int n){ if(n<=0) return 0; if(n==1) return 1; return fibonacci_recursively(n-1)+fibonacci_recursively(n-2);}long long fibonacci_iteratively(unsigned int n){ if(n<2) return n; long long fibNMinusOne=1; long long fibNMinusTwo=0; long long fibN=0; for(unsigned int i=2;i<=n;++i){ fibN=fibNMinusOne+fibNMinusTwo; fibNMinusTwo=fibNMinusOne; fibNMinusOne=fibN; } return fibN;}int main(){ cout <
<< endl; cout <
<< endl; return 0;}

在线测试OJ:

http://www.nowcoder.com/books/coding-interviews/c6c7742f5ba7442aada113136ddea0c3?rp=1

AC代码:

class Solution {public:	int Fibonacci(int n) {		if(n<2)            return n;        int fone=0;        int ftwo=1;        int fsum;        for(int i=2;i<=n;i++){            fsum=fone+ftwo;        	fone=ftwo;            ftwo=fsum;        }        return fsum;	}};

 

转载地址:http://vqzjm.baihongyu.com/

你可能感兴趣的文章
Greenplum 注意对其数据类型,否则优化器让你好看
查看>>
活动盒子产品总监分享:活动运营,让用户为你疯狂打Call
查看>>
前端 js 收藏集
查看>>
从一次性能优化看https的性能
查看>>
vue cli(webpack)增加发布到测试环境
查看>>
VS Code常用的快捷键
查看>>
zap日志二次封装
查看>>
[Spring Cloud Tutorial翻译系列一]微服务-定义、原则、好处
查看>>
React 解决fetch跨域请求时session失效
查看>>
Docker Swarm:集群
查看>>
mac配置前端开发环境
查看>>
浏览器缓存
查看>>
个人对iOS OC 消息转发机制的基本原理理解
查看>>
移动跨平台框架Flutter介绍和学习线路
查看>>
微信公众号开发Django JSSDK授权
查看>>
活动 问题记录
查看>>
Spring多数据源获取
查看>>
送给年轻而不服输的你
查看>>
可能是稀土掘金最好学的jsoup示范教程
查看>>
eclipse上传项目到github
查看>>