是否可以仅使用 for 循环来实现包含 for 循环的递归函数,该循环包含对上述函数的调用?

问题描述

有人问过类似的问题,普遍的共识是任何东西都可以从递归转换为 for 循环,反之亦然。但是,我找不到将以下伪代码类型的函数转换为 for 循环的方法

def recursive(n):
    if n == 0:
        return
    for i in range(some_number):
        do_sth...
        recursive(n-1)

在这种情况下,有 n 个嵌套循环,n 根据给定的参数而变化。当只使用 for 循环时,嵌套循环的数量似乎总是在代码中预先确定的,它不会根据“输入”而变化。有没有办法只使用 for 循环来制作这样的东西?

解决方法

有没有办法只使用 for 循环来做这样的事情?

好吧,如果您承认 while 循环是伪代码 for 循环的一种情况,那么至少可以制作您的示例:

def nonrecursive(n):
  a = []
  z = 0
  while n:
    while n:
      i = z
      if i == some_number: break
      print((n,i))
      a += [[n,i]]
      n -= 1
      z = 0
    if not a: break
    n,i = a.pop()
    i += 1
    z = i
,

我们在这里需要小心。

一般正确的说法是循环可以代替递归,反之亦然。这可以通过多种方式展示;有关想法,请参阅结构化编程定理。

for 循环是否可以代替递归取决于您的定义。您的 for 循环是否可以永远运行,或者在事先不知道的无限时间内运行?如果是这样,它们在功能上等同于 while 循环,并且它们可以替代递归。如果您的 for 循环无法永远运行或迭代次数未知(初始),则无法始终替换递归。

真的,它是 while 循环(加上一个堆栈数据结构)可以毫无困难地取代递归。