递归 - 你什么时候使用它,何时不使用它

时间:2010-07-06 16:13:15

标签: c# recursion

递归 - 您何时使用它以及何时不使用它?

6 个答案:

答案 0 :(得分:9)

每当遇到需要递归的recursion时,我都会使用problem

答案 1 :(得分:5)

通常,如果您可以使用tree数据结构来概念化问题,那么您可以使用递归来导航树。

答案 2 :(得分:2)

当它使问题更容易并且我有大量的堆栈内存时(如果是大堆栈),我会使用它。

如果堆栈内存溢价,我就不会使用它(因此调用堆栈不会变得太大而导致堆栈溢出而应用程序失败)。

答案 3 :(得分:2)

非常依赖语言。对Ruby这样没有很好尾调优化的语言要非常小心。真正的函数式语言可以更好地处理递归。在开始过度依赖之前,请确保了解memoization。我真正使用它的地方就是当我知道输入和输出的全部界限时。如果我知道我永远不会超过100级,那么我将使用它(至少在Ruby中),否则我会找到不同的模式。我希望递归更快,因为我常常找到一个我喜欢的非常简洁的2线解决方案,但这并不能稳定或快速地执行,因此我将不得不更换它。

答案 4 :(得分:0)

如果您知道您的语言/环境对调用堆栈深度有限制,我不会使用它。我记得使用早期版本的Lotus Notes,它有16级深度的限制 - 这几乎不会使任何递归使用。

答案 5 :(得分:-1)

我会使用它,只有当它显然是正确的解决方案时,没有其他方法可能是正确的。

也许对于一个因子函数,尽管可能不是。尝试Fibonnaci序列

f(n) = f(n - 1) + f(n - 2), f(0) = f(1) = 1

如果你想要一个例子,说明递归显然可以解决的事情会很快变得非常丑陋。