有什么东西只能通过递归来实现吗?

Shu*_*ham 4 algorithm recursion

我不确定,但我听说过只能通过递归实现的算法.有谁知道这样的事情?

sep*_*p2k 18

您始终可以通过保留自己的堆栈来模拟递归.所以不行.


AnT*_*AnT 9

你需要弄清楚你在谈论什么样的递归.有算法递归,并且在实现中有递归.确实,任何递归算法都允许直接的非递归实现 - 可以通过使用模拟手动堆栈递归的标准技巧轻松实现.

但是,您的问题仅提到算法.如果假设它是关于算法递归的,那么答案是肯定的,有些算法本质上是不可避免的递归.在一般情况下,不可能用非递归算法替换固有递归算法.构建固有递归算法的最简单方法是首先采用固有的递归数据结构.例如,假设我们需要仅使用父对子链接遍历树(并且没有子对父链接).不可能想出一个合理的非递归算法来解决这个问题.

所以,这就是你的一个例子:一个树的遍历,只有父到子的链接,不能通过非递归算法来执行.

固有递归算法的另一个例子是众所周知的QuickSort算法.QuickSort总是递归的,它不能简单地变成非递归算法,因为如果你成功完成它就不再是QuickSort了.这将是一个完全不同的算法.当然,这听起来像是一种纯粹语义的练习,但是这也值得一提.