递归与迭代 - 优点和缺点



递归与迭代相比有什么优点/缺点?一个比另一个好吗?如果是,为什么?一个比另一个差吗?我想了解一下这两者的利弊对比。显然,有些时候你会(或只能)只使用递归;这个问题更接近于"如果您可以使用递归或迭代,您会使用哪一个,为什么……"

我不是这方面的专家,但这是我的0.5美元

  • 通常数学。函数是通过递归定义的,因此通过递归实现精确的定义会产生一个正确的"按定义"程序

  • 递归函数(或某种程度上的方法)的
  • 性质可以用归纳法证明

  • 就我个人而言,我发现调试典型的"过程"代码要困难得多,因为必须记住所有变量的演变,所以有很多书要写。

  • 通常看起来编译器从循环中产生的机器码比从递归定义中产生的机器码更有效。然而,许多递归程序可以被编译器"作为循环"进行优化(例如尾部调用优化)。

总而言之,我认为递归是一种比循环更"高级"的语言特性。这意味着为了生成高性能的代码,编译器需要做更多的工作,但在"人"方面对递归程序进行推理更方便。

最新更新