【问题标题】:what is the advantage of recursion algorithm over iteration algorithm?递归算法比迭代算法有什么优势?
【发布时间】:2015-09-20 07:59:18
【问题描述】:

我在理解一件事时遇到了问题,即当递归涉及如此多的空间以及迭代算法和递归算法的时间复杂度相同时,除非我对其应用动态编程,那么我们为什么要使用递归,是仅仅是为了减少我们使用它的代码行数,因为即使是为了实现递归,在将函数控制权从一个调用传递到另一个调用期间,也必须保存整个 PCB?

虽然我看过很多与它相关的帖子,但我仍然不清楚实现递归优于迭代的主要优势是什么?

【问题讨论】:

标签: algorithm


【解决方案1】:

实现递归优于迭代的主要优势是什么?

  1. 可读性 - 不要忽视它。如果代码可读且简单 - 编写代码将花费更少的时间(这在现实生活中非常重要),并且更简单的代码也更容易维护(因为在未来的更新中,很容易理解发生了什么)。
    现在,我并不是说“让一切都递归!”,但如果某些东西在递归解决方案中明显更具可读性 - 除非在生产中它会使代码的性能受到明显影响 - 保留它!
  2. 性能。是的,你听到了。有时,要将递归解决方案转换为迭代解决方案,您需要的不仅仅是一个简单的循环 - 您需要一个循环 + 一个堆栈。
    但是,很多时候,您的堆栈 DS 不如机器堆栈高效,英特尔/AMD 的数百名员工专门为此目的进行了优化。
    This thread 讨论了一个特定情况,在这种情况下,算法从递归到迭代的简单转换会产生更差的结果,并且为了超越机器堆栈 - 您需要投入大量时间来优化堆栈,并且您的时间是一种稀缺资源。
    再次,我不是说 - “递归总是更快!”。但在某些情况下,可能是这样。

【讨论】:

  • 它是关于在机器上实际运行它并意识到迭代比递归更快,但是在渐近符号中的运行时间复杂度呢,在这两种情况下不一样吗?
  • 在一个线程中提到快速排序在递归的情况下更快,而不是在迭代的情况下,所以它只是谈论实际机器上的运行时间或渐近时间复杂度。
  • @RadhaGogia 查看我在答案中链接到的线程 (stackoverflow.com/a/12553314/572670)。它清楚地表明渐近复杂度保持不变。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-08
  • 2016-06-14
  • 2011-11-28
  • 1970-01-01
  • 1970-01-01
  • 2012-10-05
  • 2021-08-23
相关资源
最近更新 更多