【发布时间】:2011-03-24 10:40:51
【问题描述】:
我已经向a question 询问过这个问题,但我仍然很困惑。我想将递归函数转换为基于堆栈的函数而无需递归。以斐波那契函数为例:
algorithm Fibonacci(x):
i = 0
i += Fibonacci(x-1)
i += Fibonacci(x-2)
return i
(是的,我知道我没有设置基本情况,并且斐波那契的递归确实效率低下)
这将如何使用显式堆栈实现?例如,如果我将堆栈作为 while 循环,我必须跳出循环才能评估第一次递归,并且我无法在第一次递归之后返回该行并继续进行第二次递归.
【问题讨论】:
-
你应该澄清一点。递归也使用堆栈(程序的堆栈),而显式堆栈不是(在我看来)实现该功能的最有效方式。除此之外,语言的堆栈实现差异很大,因此如果您真的在使用哪种语言,那么了解您正在使用的语言会很有用。
-
斐波那契也许不是最好的例子,因为(至少在概念上)它需要对递归调用的结果进行操作以计算给定帧的结果。如果您实际尝试实现的内容不需要这个,那么使用显式堆栈实现会更简单。
-
事实上,我想做的事情确实需要这个,这就是为什么我对如何实现它感到困惑。
标签: algorithm