对于这个问题
  • 前三次都好算分别为1,2,3次,后面多的话不好简单计算
  • 当第n级台阶时,因为青蛙只能跳一级或二级台阶,所以第n级只有两种方法跳过来,
    即,从前一级(n-1)或前两级(n-2),所以调到这两级的方法加起来即为n级方法总数
  • 现在构成斐波那契数列(fěi bō nà qì shù liè)
注意
  • 这个是斐波那契的变种,斐波那契为 1 1 2 3 5 8
  • 现在这个问题为            1 2 3 5 8
    仅仅少了个1,代码稍加改动即可

下面代码都是基于1 2 3 5 8实现的

1.斐波那契问题最简单的是递归实现,但是递归运行效率太低,而且python有最大递归深度,我试了一下基本上递归900次都需要很长时间.所以只简单写出来参考,不推荐

注意:python3默认最大递归深度为998,可以通过sys.setrecursionlimit(1000)来设置最大递归深度,但是递归效率太低,所以不推荐,仅供了解

def Fibonacci(num):if num <= 2:return numelse:fn = Fibonacci(num-1) + Fibonacci(num - 2)return fnprint(Fibonacci(30))
   # 运行时间   30次递归都要31秒Fibonacci executed in 31.423158 s1346269
2.非递归实现
def Fibonacci(n):if n <=2:return nelse:last,last_last = 1, 2for i in range(n - 2):last,last_last = last_last, last + last_lastreturn last_last
print(Fibonacci(10000))
# 非递归10000次才0.004秒
Fibonacci executed in 0.003991 s
544383731135652813387342609937503801353891845546959670262477
3.非递归2
def Fibonacci(n):if n <=3:return nelse:last,last_last = 3,2for i in range((n//2)-1):last_last = last+last_lastlast = last+last_lastreturn last_last if n%2 == 0 else last
print(Fibonacci(30))
4.列表实现(因为要添加列表元素,比2,3慢,也不太推荐)
def Fibnacci(n):result = [1,2]if n <= 2:return nfor i in range(2,n+1):result.append(result[i-1]+result[i-2])return result[n-1]
print(Fibnacci(10000))
Fibnacci executed in 0.012464 s
5443837311356528133873426099375038013538918455469596702624

一只青蛙一次可以跳一级或二级台阶,请问跳n级台阶有多少次跳法之斐波那契数列的非递归写法相关推荐

  1. 笔试题:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。该题有三种解法:递归的方法求解斐波那契数列、用概率与统计的数学方法解决,3.动态规划

    笔试题 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总共有多少种跳法.该题有三种解法:1.递归的方法求解斐波那契数列.2.用概率与统计的数学方法解决,3.动态规划 ...

  2. 牛客网刷题java之(斐波那契数列)一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

    题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 分析: 对于本题,前提只有 一次 1阶或者2阶的跳法. a.如果两种跳法, ...

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

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

  4. 由递推关系式用差分方程的方法得到通项公式实现求斐波那契数列的第n项;迭代、递归、栈、差分方程之间的本质联系以及由推广的迭代法解决“变态青蛙跳台阶”问题;汉诺塔问题的数字特征以及用递归解决的原理推导。

    最近几天在研究算法中一个比较基础且突出的问题,就是关于"递推关系式.递归.迭代.序列前k项和"之间的区别与联系. 一.斐波那契数列与差分方程 首先我们考察一个经典的算法,求斐波那契 ...

  5. 青蛙跳台阶问题(斐波拉契数列、动态规划)

    青蛙跳台阶问题 题目描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总共有多少种跳法. 答案需要取模 1e9+7(1000000007),如计算初始结果为:10 ...

  6. 青蛙跳台阶:我如何得知它是一道斐波那契数列题?——应用题破题“三板斧”

    本文以C语言实现. 目录 前言 一.斐波那契阿数列基础知识 二.引例:青蛙跳台阶 三.破题分析:举例归纳 1. 三板斧的使用 举例 模拟(必要时画图) 找规律 2. 代码展示 四.拓展用例:矩形覆盖问 ...

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

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

  8. 青蛙跳台阶问题暨斐波那契数列

    1.问题描述 一只青蛙一次可以跳上 1 级台阶,也可以跳上 2 级.求该青蛙跳上一个 n 级的台阶总共有多少种跳法. 2.问题分析 设 f(n) 表示青蛙跳上 n 级台阶的跳法数.当只有一个台阶时, ...

  9. python一只青蛙一次可以_40.细说递归之二:Python求解斐波那契数列

    本篇通过青蛙跳台阶.兔子数列(斐波那契数列)问题进一步理解递归思想的魅力. 上一篇最后的题目如下: 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个n级的台阶总共有多少种跳法? 归纳 ...

最新文章

  1. django学习教程
  2. idea java编译报错_intellij-idea,java_idea 编译报错,intellij-idea,java - phpStudy
  3. FD.io/VPP — IPSec
  4. sdh管理单元指针_C语言学习|指针的介绍
  5. 2011寒假-joomla学习笔记
  6. ODPS SQL for 数据操作语言DML
  7. parentNode,parentElement,childNodes,children的区别
  8. kali linux之edb--CrossFire缓冲区溢出
  9. js语句连接mysql数据库_js中require()的用法----JS如何连接数据库执行sql语句或者建立数据库连接池...
  10. android 删除wifi文件在哪里设置,如何删除无线终端的无线配置文件
  11. AngularJS 后台交互
  12. LeetCode. 15 - 三数之和
  13. 怎么看自己电脑MySQL版本_如何查看自己电脑sqlserver数据库版本
  14. 什么是 Skype?
  15. Java RestTemplate 增加SSL证书
  16. 用命令提示符打开资源管理器目录
  17. 你有价值,你的爱才有价值
  18. python 仪表数字识别,利用Python进行数字识别
  19. 大数据在线实习项目能收获什么呢?
  20. MySQL分区表与索引

热门文章

  1. ssm+java企业公司产品分销商管理系统
  2. Java基础及API总结
  3. 注册【小程序】和注册页面
  4. Matlab — 常见矩阵生成及矩阵运算
  5. 关于PKI 你了解多少
  6. system verilog断言学习笔记
  7. 04、江苏专转本(专业课笔记)第四章、计算机网络与因特网
  8. OneHotEncoder独热编码
  9. C基础学习之C 存储类
  10. SpringBoot+Vue搭建前后端分离的轻博客