用while循环替换递归(爬楼梯拼图):Python

时间:2014-08-27 01:56:02

标签: python fibonacci

我正在练习用while循环替换递归,并且我坚持以下问题。

如果你一次只能走1或2楼梯,你可以走多长度n的楼梯?

递归解决方案非常简单:

def stairs(n):
  if n <= 1:
    return 1
  else:
    return stairs(n-2) + stairs(n-1)

我觉得迭代程序的结构应该是这样的:

def stairs_iterative(n):
  ways = 0
  while n > 1:
    # do something
    ways +=1
  return ways

但我不知道我需要把什么放在#do中。有人能帮我吗?伪代码很好!

2 个答案:

答案 0 :(得分:6)

这相当于自上而下(递归)方法与自下而上(迭代)方法进行动态编程。

由于您知道输入n,因此stairs(p)需要0 <= p <= n的所有值。您可以从stairs(p)开始迭代计算p = 0,直到达到p = n,如下所示:

def stairs(n):
    table = [1, 1]  # p = 0 and p = 1
    for i in range(2, n + 1):
        table.append(table[i - 2] + table[i - 1])
    return table[n]

答案 1 :(得分:0)

与@univerio不同的方法是将列表用作堆栈:

def stairs_it(n):
    res = 0
    stack = [n]
    while len(stack) > 0:
        curr = stack[0]
        stack.remove(curr)
        if curr == 0:
            res += 0
        elif curr == 1:
            res += 1
        elif curr == 2:
            res += 2
        else:
            stack.append(curr-1)
            stack.append(curr-2)
    return res