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

 

posted @ 2016-04-05 21:17  侠之大者kamil  阅读(145)  评论(0)    收藏  举报