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

标签 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 something 部分添加什么。有人能帮我吗?伪代码很好!

最佳答案

这相当于动态规划的自上而下(递归)方法与自下而上(迭代)方法。

因为您知道输入 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]

关于python - 用 while 循环替换递归(爬楼梯拼图): Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25517791/

相关文章:

java - 递归java修改斐波那契数

c++ - 需要帮助清理斐波那契数列请使用 C++

python - 如何使用 Pandas 读取 CSV,并且只将其读入 1 列而没有 Sep 或 Delimiter

python - 如何在不创建临时本地文件的情况下将文件上传到 S3

python - Django REST Framework 不以 PUT 形式显示值

java - 优化递归斐波那契方法。

python - 根据创建值对列表中的推文进行排序

python - 如何检查 url 是否不在 i18n_pattern 中?

c++ - 使用 C++ 查找第 1500000 个斐波那契数

Java尾递归: Is below Fibonacci code tail recursive ?