动态三重N步

时间:2017-11-01 02:30:15

标签: recursion dynamic-programming

我正在解决破解编码面试的问题:

一个孩子在n级台阶上跑步,可以一步跳一步,两步或三步。 实施一种方法来计算孩子爬楼梯的可能方式。 我想出了一个动态的解决方案:

def dynamic_prog(N):
    store_values = {1:1,2:2,3:3}
    return dynamic_prog_helper(N, store_values)

def dynamic_prog_helper(N, map_n):
    if N in map_n:
        return map_n[N]
    map_n[N] =  dynamic_prog_helper(N-1, map_n) + dynamic_prog_helper(N-2, map_n) + dynamic_prog_helper(N-3,map_n)
    return map_n[N]

我不确定为什么它无法正确计算。

dynamic_prog(5) = 11, but should be 13
dynamic_prog(4) =  6, but should be 7

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

关键问题是store_values[3]的初始值是错误的。从3个步骤开始,您有4种可能性:

3    2 1    1 2    1 1 1

修复该错误会获得预期结果:

def dynamic_prog(N):
    store_values = {1:1,2:2,3:4}
    return dynamic_prog_helper(N, store_values)
...
for stair_count in range(3, 6):
    print dynamic_prog(stair_count)

输出:

4
7
13
相关问题