Recursion 动态三N步

Recursion 动态三N步,recursion,dynamic-programming,Recursion,Dynamic Programming,我正在解决破解编码面试的问题: 一个孩子跑上n级楼梯,一次可以跳1级、2级或3级。 实现一个方法来计算孩子可以跑上楼梯的可能方式。 我提出了一个动态解决方案: 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: retur

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

一个孩子跑上n级楼梯,一次可以跳1级、2级或3级。 实现一个方法来计算孩子可以跑上楼梯的可能方式。 我提出了一个动态解决方案:

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

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

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

三, 2 1 1 2 11

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

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