Python爬楼梯问题:有n阶台阶,上楼可以一步上1阶,2阶,3阶,计算共有多少种不同的走法?

总共n步台阶(先假设n>3),f(n)表示n步台阶的走法总数

1、第一步如果是只走1步台阶,剩下的n-1步台阶怎么走(多少种走法)就只和n-1步台阶有关,f(n-1)

2、第一步如果是走2步台阶,剩下的n-2步台阶怎么走(多少种走法)就只和n-2步台阶有关,f(n-2)

3、第一步如果是只走3步,剩下的n-3步台阶怎么走(多少种走法)就只和n-3步台阶有关,f(n-3)

高中数学的排列:迈开步子的第一步有3种走法,再去算1、2、3种走法的总数加起来就是总的走法数。

第一步走1阶台阶,2阶台阶,3阶台阶,各是一种走法,1、2、3加起来就是走法的总数了

fn(n)=fn(n-1)+fn(n-2)+f(n-3) # 这种款式的表达式是不是类似斐波那契数列?

(斐波那契数列定义:0、1、1、2、3、5、8.。。。f(n)=f(n-1)+f(n-2)

假设总共3步台阶:1、1、1, 2、1, 3, 1、2总共四种走法

1-1-1

1-2

2-1

3

1、第一步走1步,走完所有台阶的走法,只与剩下的2步台阶有多少种走法有关了,fn(3)=fn(2),总共2中走法

2、第一步走2步,走完所有台阶的走法,只与剩下的1步台阶有多少种走法有关了,fn(3)=fn(1),总共1中走法

3、第一步走3步,走完所有台阶的走法,只与剩下的0步台阶有多少种走法有关了,fn(3)=fn(0),总共1种走法 。这里不要纠结fn(0)=1

fn(3)=2+1+1=4

所以这个等式成立不啊?!

fn(3)=fn(3-1)+fn(3-2)+f(3-3)

==>fn(3) = fn(2)+fn(1)+f(0)

==>fn(3) = fn(1)+fn(0)+fn(1)+fn(0)

这么理顺下来,就是归并排序用到的分而治之的思想,分到最细,1步阶梯只有1种走法,但因为递归运算要设置条件fn(0)=1,才能递归算下去

from functools import lru_cache #python函数工具包里的缓存模块

@lru_cache(1024)

def sum_stairs_recursion(sum):

"""

有n阶台阶,上楼可以一步上1阶,2阶,3阶,计算共有多少种不同的走法?

递归算法

不加缓存模块sum>100,一般电脑就很难算出来了,试了下n=30,i5四核跑了50秒

:param sum:传入楼梯数 int

:return: int

"""

if sum==0:

return 1

elif sum <0:

return 0

return sum_stairs_recursion(sum-1)+sum_stairs_recursion(sum-2)+sum_stairs_recursion(sum-3)

def sum_stairs_Fibo(sum):

"""

非递归算法,斐波那契数列

台阶数:1、2、3、4、5、6

走法数:1、2、4、7、13、24

:param sum:

:return:

"""

a,b,c = 1,2,4

while sum-1>0:

a,b,c = b,c,a+b+c

sum -= 1

return a

python爬楼梯多少种_Python 爬楼梯问题--有n阶台阶,上楼可以一步上1阶,2阶,3阶,计算共有多少种不同的走法?...相关推荐

  1. Python 爬楼梯问题--有n阶台阶,上楼可以一步上1阶,2阶,3阶,计算共有多少种不同的走法?

    Python爬楼梯问题:有n阶台阶,上楼可以一步上1阶,2阶,3阶,计算共有多少种不同的走法? 总共n步台阶(先假设n>3),f(n)表示n步台阶的走法总数 1.第一步如果是只走1步台阶,剩下的 ...

  2. n级阶梯,人一步只能上1~2级,求一共有几种走法?

    B站上有这样一道题: 大厂算法很难!力扣经典算法解析,小白也能懂!_哔哩哔哩_bilibili数据结构和算法可以让程序员脱胎换骨,刷算法题可以帮助我们通过面试和笔试,找到梦寐以求的工作,进入一线大厂或 ...

  3. 字节算法题--N阶台阶,每次走一步或两步,计算共有多少种走法,并将每种走法打印出来。

    N阶台阶,每次走一步或两步,计算共有多少种走法,打印出每种走法. 一 走台阶算法(本质上是斐波那契数列)在面试中常会遇到,描述就如题目那样:总共100级台阶(任意级都行),小明每次可选择走1步.2步或 ...

  4. 【面试题】N阶台阶,每次走一步或两步,计算共有多少种走法,并将每种走法打印出来。

    题目重述:有N阶台阶,每次可以走一步也可以走两步,计算共有多少种走法,并将每种走法打印出来. 以下解法主要利用了二叉树和递归的解题思路. public class StepCompute {priva ...

  5. python爬取虾米音乐_Python爬取620首虾米歌曲,揭秘五月天为什么狂吸粉?!

    最近两天,我被朋友圈的五月天粉丝(五迷)疯狂刷屏,"五月天永远陪你到20岁""演唱会即视感",这些字眼让我恨不得马上奔到电影院打卡. 作为五迷,我是满怀激情地在 ...

  6. python抓取微博评论_Python爬取新浪微博评论数据,你有空了解一下?

    开发工具 Python版本:3.6.4 相关模块: argparse模块: requests模块: jieba模块: wordcloud模块: 以及一些Python自带的模块. 环境搭建 安装Pyth ...

  7. python爬取手机微信_Python爬取微信好友

    前言 今天看到一篇好玩的文章,可以实现微信的内容爬取和聊天机器人的制作,所以尝试着实现一遍,本文记录了实现过程和一些探索的内容 itchat安装 对微信的控制可以使用itchat来实现,我们找到itc ...

  8. python爬取豆瓣书籍_python 爬取豆瓣书籍信息

    继爬取 猫眼电影TOP100榜单 之后,再来爬一下豆瓣的书籍信息(主要是书的信息,评分及占比,评论并未爬取).原创,转载请联系我. 需求:爬取豆瓣某类型标签下的所有书籍的详细信息及评分 语言:pyth ...

  9. python开源代码百度盘_python爬取百度云网盘资源-源码

    今天测试用了一下python爬取百度云网盘资源. 代码片段import urllib import urllib.request import webbrowser import re def yun ...

最新文章

  1. Matlab/Simulink ROS
  2. 印度交通部或禁止无人驾驶汽车进入本土市场
  3. python发明者叫什么-python发明人
  4. 如果我要...(??版)
  5. 谷歌浏览器32位安装包_谷歌浏览器发布紧急安全更新修复Blink内核中的任意代码执行漏洞...
  6. 关于标准输入输出流和string类
  7. sonarqube对接maven
  8. redis java 缓存服务器_java中对Redis的缓存进行操作
  9. 苹果“修复”系统过于流畅的BUG遭到制裁,被罚款近2亿!网友:罚少了!
  10. java静态链表_静态链表及其创建(C语言实现)
  11. C语言基础之--sizeof()运算符的使用以及注意
  12. Flex入门的好书——《Flex3 Cookbook 中文版》
  13. Neural Architecture Search(NAS)强化学习寻找最优网络、NASNet、MNASNet
  14. php pacs,PACS系统
  15. Kinect for Windows SDK v2.0 开发笔记 (七)语音识别(上)
  16. vue项目如何部署?history与hash模式部署时的区别
  17. python什么字体好看_python docx 中文字体设置的操作方法
  18. 如何高效设计游戏——游戏伤害公式的量身定做
  19. 解决非硬件问题导致的U盘总容量大幅减少
  20. 【文本展开收起】uniapp—实现文本的展开与收起功能

热门文章

  1. Android验证码倒计时实现方式总结
  2. x must be 1d
  3. 由皮鞋引起的Java娱乐中文版
  4. JSON Parse error:Unrecognized token xxx
  5. [Unity-25] Unity中让游戏对象消失或隐藏的几种方法
  6. Android 进阶笔记,包含常用的技术框架、博客社区、书籍等。
  7. 【材料计算】分析第一原理的计算结果,包括能带、态密度等
  8. 侍魂胧月传说服务器维护,侍魂胧月传说手游7月15日停机维护更新预告
  9. Newstart HA进阶
  10. try{}里面有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?