我喜欢递归。我认为它可以简化很多东西。也许有人不同意;但我认为它还使得代码更易于阅读。然而,我注意到在像C#这样的语言中递归并没有像在LISP中那样经常使用(顺便说一下,LISP是我的最爱,因为它支持递归)。
是否有人知道是否有任何好理由不在像C#这样的语言中使用递归呢? 是否比迭代更昂贵?
我喜欢递归。我认为它可以简化很多东西。也许有人不同意;但我认为它还使得代码更易于阅读。然而,我注意到在像C#这样的语言中递归并没有像在LISP中那样经常使用(顺便说一下,LISP是我的最爱,因为它支持递归)。
是否有人知道是否有任何好理由不在像C#这样的语言中使用递归呢? 是否比迭代更昂贵?
递归比迭代更难并行化(或者说几乎不可能)。
现代CPU有多核心,因此如果你设计的是递归算法,直接使用parallel.for(以及类似的技术)进行优化会变得更加困难。
然而,并行化仍然相当模糊,使用它的人相对较少。
此外,我认为递归算法更容易设计和思考,因为它们涉及的代码和变量稍微少一些。如果没有性能需求,我通常会选择递归。
await
它们,然后进行递归调用。这可能略微不太直观,但我不确定是否会说是不可能或者要难得多。 - 2-bitsfree()
我的整个链表,然后我用最大的链表进行了测试,结果出现了错误(我相信这是一个段错误 - 明显应该是堆栈溢出 :))。当处理类似于列表或向量这样的固有线性数据结构时,选择迭代构造而不是递归的原因之一是它更好地传达了代码的意图。当递归被滥用而迭代足以胜任时,往往需要更多的努力才能让读者理解程序的结构。
我想提醒大家,在XSLT中,一旦变量被创建后就是只读的。因此,像使用索引for循环做的事情,
for(int i=0; i < 3; i++) doIt(i);
实际上是使用递归完成的。类似于
public rediculous(i) {
doIt(i);
if (i < 3) rediculous(i + 1);
}