如何跟踪递归内部-戴维斯楼梯

时间:2018-10-26 14:30:32

标签: python-3.x recursion

我正在尝试以下问题:https://www.hackerrank.com/challenges/ctci-recursive-staircase/problem?h_l=interview&playlist_slugs%5B%5D=interview-preparation-kit&playlist_slugs%5B%5D=recursion-backtracking

下面是我的代码:

def stairs(steps, curr, count):
    if curr <= steps:


        for i in [1,2,3]:
            curr = curr + i
            if curr == steps:
                print("Yes")
                count += 1
            stairs(steps,curr,count)
            curr = curr - i

    return count

print(stairs(3,0,0))

我认为我已经正确执行了递归,但是count中返回的最终值为1,在这种情况下应该为4。

我在要更新计数的块中添加了一条打印语句,并按预期将其打印4次,但是当递归结束时count的值为1。

如何跟踪此计数?还是我在这里想念什么?

1 个答案:

答案 0 :(得分:1)

您可以按以下步骤修复它。只需将递归调用分配给您的计数即可。

def stairs(steps, curr, count):
    if curr <= steps:
        for i in [1,2,3]:
            curr = curr + i
            if curr == steps:
                count = stairs(steps,curr,count+1)

            else:
                count = stairs(steps,curr,count)
            curr = curr - i
    return count

P.S。您的当前函数将在对大型输入进行递归调用时爆炸。您应该优化您的方法。