问题:一段楼梯共10级台阶,规定每一步只能跨一级或两级或三级。要等上第10级台阶共有几种走法?
思路:我们先从最后开始考虑,因为规定每一步只能跨一级或两级或三级,那么:
从第9级爬上去的可能性有1种; #跨一级:1
从第8级爬上去的可能性有2种; #连续跨一级或者跨两级:11,2
从第7级爬上去的可能性有4种; #穷举:111,12,21,3
然后用递归的思想,把楼梯共10级台阶替换成楼梯共9级台阶/楼梯共8级台阶/楼梯共7级台阶......
我们设爬n级台阶的解法总数为f(n),因为规定每一步只能跨一级或两级或三级,则f(n)=f(n-1)+f(n-2)+f(n-3)。
用穷举法求初始条件:
n=1时,f(n)=1;
n=2时,f(n)=2;
n=3时,f(n)=4;
n=4时,f(n-1)+f(n-2)+f(n-3)=f(n)=f(4)=f(3)+f(2)+f(1);
......
在Python中实现的代码为:
#函数体
def jumpFloor(a):
n = int(a) #很重要,输入的台阶数目取整
if n == 1:
return 1 #Python的return后可以加“;”或者省略
elif n == 2:
return 2
elif n == 3:
return 4
else:
z = jumpFloor(n-1)+jumpFloor(n-2)+jumpFloor(n-3)
return (z) #可以把变量替代省略,返回值里直接写成公式
n = input('Please give a number:')
print('The number of solutions is:', jumpFloor(n))
贴张图,看着顺心
欢迎补充和优化(比如变量取整型) :)