【发布时间】:2017-09-07 19:56:46
【问题描述】:
我了解迭代 DFS 代码here。 但是,在我看来,当我们使用迭代时,我们只能模拟 DFS 的 forward 递归调用,而不能模拟 return 语句。例如,如果我想使用递归解决方案的迭代模拟版本来计算 N!,我们无法实现。
我对这个结论是否正确? 一个反例将不胜感激。
【问题讨论】:
我了解迭代 DFS 代码here。 但是,在我看来,当我们使用迭代时,我们只能模拟 DFS 的 forward 递归调用,而不能模拟 return 语句。例如,如果我想使用递归解决方案的迭代模拟版本来计算 N!,我们无法实现。
我对这个结论是否正确? 一个反例将不胜感激。
【问题讨论】:
我不清楚您在哪里感到困惑——这可能是您的困惑造成的。 return 的迭代同源不是明确的;这是一个不同的过程。控制流只是简单地返回到循环的顶部。数据流取决于算法:例如,您从堆栈中弹出一个项目,或将结果存储在一个数组中。
如果“nth factorial”是数学 N!计算,迭代 return 只是下一次循环迭代,部分乘积存储在局部变量中:
# value of n is given
prod = 1
for i in range(n, 1, -1):
prod *= i
# yield prod as result
【讨论】: