【发布时间】:2021-05-24 20:52:18
【问题描述】:
已经提出了类似的问题,并且普遍的共识是任何东西都可以从递归转换为 for 循环,反之亦然。但是,我找不到将以下伪代码类型的函数转换为 for 循环的方法:
def recursive(n):
if n == 0:
return
for i in range(some_number):
do_sth...
recursive(n-1)
在这种情况下,有 n 个嵌套循环,n 根据给定的参数而变化。仅使用 for 循环时,嵌套循环的数量似乎总是在代码中预先确定,它不会因“输入”而异。有没有办法只使用 for 循环来制作这样的东西?
【问题讨论】:
-
您所指的共识是特定于具有预定循环数的循环吗? IMO这没有意义......也许只是“函数调用自身的每个算法都可以在没有函数实际调用自身的情况下实现”?
-
@obe 的共识是,任何可以使用这些实现的东西都可以使用另一个实现。换句话说,是的,就是你说的,但在我看来,它不适用于嵌套循环的数量没有预先确定的情况。
-
在“最坏的情况下”,您可以实现一个本地堆栈数据结构和一个模拟递归的无限循环。这可以在所有情况下工作,并且您不会有一个函数调用自己,但我不确定它是否仍会被视为“不使用递归”,因为它只是移动由生成的与堆栈相关的指令编译器(以及像
CALL和RET这样的硬件级指令)到你的“用户空间”代码。但是,当您的嵌套对于可用的“内置”堆栈大小而言太深时,它可以帮助解决堆栈溢出问题)。
标签: loops for-loop recursion nested-loops theory