【发布时间】:2013-12-18 09:16:09
【问题描述】:
我想知道,为什么人们使用递归?在我的大部分学习经验中,我发现它比迭代方法效率低得多,那么人们为什么要使用它呢?是因为你可以简单地写一个更短的方法吗?它是否用于课堂环境(或学习目的)之外的现实世界编程?如果是,请提供一个很好的例子,我很好奇。
提前感谢您的帮助!我真的很感激!
【问题讨论】:
标签: performance recursion iteration
我想知道,为什么人们使用递归?在我的大部分学习经验中,我发现它比迭代方法效率低得多,那么人们为什么要使用它呢?是因为你可以简单地写一个更短的方法吗?它是否用于课堂环境(或学习目的)之外的现实世界编程?如果是,请提供一个很好的例子,我很好奇。
提前感谢您的帮助!我真的很感激!
【问题讨论】:
标签: performance recursion iteration
嗯,一方面,它用于函数式编程语言(如 Haskell)中,这些语言实际上没有迭代,并且针对递归进行了优化。此外,对于某些问题(例如使用二叉树),递归是一种非常自然且干净的解决方案。
【讨论】:
如果您有一个树数据结构并且您想以深度优先的顺序遍历它,那么递归是实现它的唯一方法。
如果您想为具有上下文无关规则的典型语言编写解析器,就像现有的每种编程语言一样,递归下降解析器是一种简单而自然的方法。 在存储空间有限的情况下,没有迭代方法。
【讨论】:
expanded 标志。从只包含根的列表开始。当您浏览列表时,如果您看到一个尚未展开的节点,并且它有任何子节点,请在当前节点之前插入子节点,设置当前节点的 expanded 标志,并将迭代器向后移动,以便孩子将是下一个处理的节点。否则,处理该节点并将迭代器向前移动。