6.猴子下山
问题:50 个台阶,,一步 2 ,3 ,4 则有多少种上山方法。
代码:
#!/usr/bin/env python # encoding: utf-8 """ @author: 侠之大者kamil @file: 23猴子上山.py @time: 2016/4/5 20:52 """ #到n阶的方法个数 f(n) = f(n-2) + f(n-3) + f (n-4) def fun(n,steps):#n为台阶数字,steps为可跳跃的台阶数 a = [0] * (n+1) a[0] = 1#第一步只有一个跳法 for i in range(n + 1):#如果n=3 则循环 0 ,1,2,3 for s in steps:#一次可以的步数;2,3,4, if i < s: #保证台阶数小于一次可以的步数 break a[i] += a[i - s] #f(n) = f(n-2) + f(n-3) + f (n-4) return a[n],a#a是一个存放所有可能数的一个list,用于存放迭代的各个值 print(fun(2,(1,2))) print(fun(3,(1,2))) print(fun(4,(1,2)))#可以看出增加一个台阶,带来的可能性 fun(2,(1,2)) + fun(3,(1,2)) = fun(4,(1,2)) print(fun(4,(1,3))) print(fun(20,(2,3,4)))
结果:
C:\Python34\python.exe D:/kamil/Documents/py/趣味百题/23猴子上山.py (2, [1, 1, 2]) (3, [1, 1, 2, 3]) (5, [1, 1, 2, 3, 5]) (3, [1, 1, 1, 2, 3]) (760, [1, 0, 1, 1, 2, 2, 4, 5, 8, 11, 17, 24, 36, 52, 77, 112, 165, 241, 354, 518, 760]) Process finished with exit code 0
公众号请关注:侠之大者

浙公网安备 33010602011771号