我正在练习用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中。有人能帮我吗?伪代码很好!
答案 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