700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > python爬楼梯多少种_Python 爬楼梯问题--有n阶台阶 上楼可以一步上1阶 2阶 3阶

python爬楼梯多少种_Python 爬楼梯问题--有n阶台阶 上楼可以一步上1阶 2阶 3阶

时间:2019-08-11 22:54:53

相关推荐

python爬楼梯多少种_Python 爬楼梯问题--有n阶台阶 上楼可以一步上1阶 2阶 3阶

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阶 计算共有多少种不同的走法?...

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。