题目:斐波那契数列

大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。

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

基本思路

这道题在剑指offer中实际是当作递归的反例来说的。

递归的本质是吧一个问题分解成两个或者多个小问题,如果多个小问题存在互相重叠的情况,那么就存在重复计算。

f(n) = f(n-1) + f(n-2) 这种拆分使用递归是典型的存在重叠的情况,所以会造成非常多的重复计算。

另外,每一次函数调用爱内存中都需要分配空间,每个进程的栈的容量是有限的,递归层次过多,就会造成栈溢出。

递归是从最大数开始,不断拆解成小的数计算,如果不去考虑递归,我们只需要从小数开始算起,从底层不断往上累加就可以了,其实思路也很简单。

代码

function Fibonacci(n)
{if(n<=1){return n;}let i = 1;let pre = 0;let current = 1;let result = 0;while(i++ < n){result = pre + current;pre = current;current = result;}return result;
}

题目:跳台阶

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

基本思路

找规律:

跳三级台阶等于跳两级台阶的跳法+跳一级台阶的跳法。

跳四级台阶等于跳三级台阶的跳法+跳二级台阶的跳法。

明显也符合斐波那契数列的规律

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

代码

function jumpFloor(n)
{if(n<=2){return n;}let i = 2;let pre = 1;let current = 2;let result = 0;while(i++ < n){result = pre + current;pre = current;current = result;}return result;
}

题目:变态跳台阶

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

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

基本思路

每个台阶都可以选择跳或者不跳,最后一个台阶必跳。

每个台阶有两种选择,n个台阶有2的n次方种选择。

所以一共有2的n-1次跳法。

使用位运算

代码

function jumpFloorII(number)
{return 1<<(--number);//Math.power(2,number-1) }

题目:矩形覆盖

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

基本思路

假设为2*8,f(8)用第一个小矩形去覆盖左边有两种,竖着的之后,右边有f(7)中选择,当横着的时候,有f(6)中选择,所以f(8)=f(7)+f(6),也是斐波那契数列,n=1时只有一种,n=2时有两种,f(n)=f(n-1)+f(n-2)

代码

function rectCover(number)
{// write code hereif(number<0)return ;if(number<=2)return number;let [one,two]=[1,2];let temp;for(var i=3;i<=number;i++){temp=one;one=two;two=temp+two;}return two;
}

  

转载于:https://www.cnblogs.com/QianDingwei/p/10923738.html

7、斐波那契数列、跳台阶、变态跳台阶、矩形覆盖------------剑指offer系列相关推荐

  1. 斐波那契数列 青蛙跳台阶 变态跳台阶

    目录 一.斐波那契数列 二.青蛙跳台阶问题 三.变态跳台阶 一.斐波那契数列 题目:写一个函数,输入n,求斐波那契数列的第n项. 思路:用递归的方法,f(n) =f(n-1) + f(n-2).代码比 ...

  2. 面试题9:斐波那契数列

    题目1:写一个函数,输入n,其斐波那契数列的第n项. 斐波那契数列的定义如下: 方法1:使用递归解,时间复杂度是n的指数级别 斐波那契数列的定义就是递归的,我们根据定义可以很简单的写出代码.代码如下: ...

  3. 趣学算法--斐波那契数列

    14天阅读挑战赛 努力是为了不平庸~ 目录 1.神奇的兔子数列 1.1问题分析 1.2斐波那契数列 1.3算法设计 1.3.1递归代码 1.3.2递归的改进,O(n)的代码 1.3.3时间复杂度为O( ...

  4. 漫谈斐波那契数列与黄金分割比

    (一)奇妙的斐波那契数列: 斐波那契数列的由来是"兔子问题". 从中总结的规律就是: (1)每个月小兔子数 = 上个月的大兔子数: (2)每个月的大兔子数 = 上个月的大兔子数 + ...

  5. 斐波那契数列与黄金分割比

    原文地址:https://blog.csdn.net/g1933375079/article/details/18773641(如有侵权请联系删除) (一)奇妙的斐波那契数列: 斐波那契数列的由来是& ...

  6. 斐波那契数列112358c语言编程,c语言中的斐波那契数列

    本文概述 C中的斐波那契数列:对于斐波那契数列,下一个数字是前两个数字的和,例如0.1.1.2.3.5.8.13.21等.斐波那契数列的前两个数字为0和1. 编写fibonacci系列程序的方法有两种 ...

  7. 斐波那契数列及青蛙跳台阶问题

    题目1: 写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项. 斐波那契(Fibonacci)数列定义例如以下: f(n)=⎧⎩⎨⎪⎪0,1,f(n−1)+f(n−2),n=0n=1n& ...

  8. 算法练习day20——190411(重建二叉树、斐波那契数列、跳台阶、矩形覆盖、变态跳台阶、旋转数组的最小数字、矩阵中的路径)

    1.重建二叉树 根据二叉树的前序遍历和中序遍历的结果,重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. preorder = [3,9,20,15,7].inorder = [9 ...

  9. 《剑指offer》-- 斐波那契数列、跳台阶问题 、变态跳台阶问题、矩阵覆盖

    一.斐波那契数列: 1.题目: 现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0).n<=39. 2.什么是斐波那契数列? 斐波那契数列指的是这样一个数列: 0, 1, ...

最新文章

  1. 列子御风 大道至简 心诚天人合一
  2. javascript之parseInt的用法分析
  3. 细说plsql中的空值表达式
  4. #pragma pack(1)的作用
  5. oracle 12c 自动任务,Oracle job自动任务实用指南
  6. redis基本类型以及优点特性
  7. 美国量子计算机能编程吗,世界首台可编程通用量子计算机美国问世
  8. linux vmware 安装后无法桥接到物理网卡的解决办法
  9. oracle表空间管理图形界面,Oracle表空间管理和优化
  10. Eclipse-maven项目不将resources下的文件打到classpath下
  11. php query builder,php – Symfony2 – Doctrine2 QueryBuilder WHERE I...
  12. 【NLTK基础】一文轻松使用NLTK进行NLP任务(附视频)
  13. 如何简单运行Java程序
  14. 如何做项目总结与汇报
  15. java运算符与数字分解,看完对java更加有信心了(主除以和取余的理解)
  16. python 实现布谷鸟算法(CS)
  17. 【增大C盘内存——拓展卷】C盘与未分配空间之间有恢复分区的解决方法——安装diskgenius
  18. 【搜索与回溯算法】保卫农场(DFS)
  19. 域渗透基础之NTLM认证协议
  20. 双网卡单IP实现网卡冗余与负载均衡

热门文章

  1. ORA-16629: database reports a different protection
  2. 219. Contains Duplicate II
  3. pageContext.findAttribute()与pageContext.getAttribute()的区别
  4. 基于Linux的集群系统(一)
  5. 成都机场迎春运客流高峰 日均起降航班超1000架次
  6. 易飞90设计自己定义画面新增功能说明
  7. 用HttpWebRequest抓取网页,尝试自动重定向的次数太多”的错误,
  8. awk的集合操作实现
  9. 关于学习Mongodb的几篇文章
  10. python3.x安装cv2失败