递归何时比迭代更好?

时间:2018-01-10 05:06:57

标签: performance recursion

在我的理解中,通常,递归解决方案被忽视,因为递归通常占用大量内存,而迭代解决方案在这种意义上更有效。

解决方案必须达到什么样的优雅才能使其递归实现比迭代实现更普遍被接受?

例如,河内塔问题的迭代实现绝对是残酷的,但它的递归实现几乎是令人惊叹的优雅。我永远不会使用迭代实现对河内进行编码,因为它非常繁琐。

对于树和其他递归定义的数据结构,递归更优雅,但我们是否在浪费空间?我们应该将树表示为数组并使用一些讨厌的索引来实现最佳性能吗?

2 个答案:

答案 0 :(得分:0)

请引用您的推荐信。谁是"俯视"在某些解决方案?

可以在C中以多种方式解决河内塔问题,因为对堆栈分配的本地人有语言支持。如果没有这样的语言支持,应用程序代码就必须管理用户分配的堆栈,代价是使代码不那么简洁,对于不经意的读者来说也不太清楚。

您似乎在关注两个不同的指标:机器性能(时间+空间)和可维护性。通常,您应优化可维护性,以最大限度地减少熟练程序员分析代码以添加功能或修复错误所需的时间。当过多的运行时间妨碍实现某些业务目标时,开始担心机器性能。当您的代码足够成熟,在100毫秒的运行时间内优化50%变得有价值时,您将拥有许多业务驱动因素,为您提供指导以帮助您做出决定。

答案 1 :(得分:-1)

与Iterative Solutions相比,递归解决方案肯定会占用更多堆栈。如果递归解决方案没有基本情况,最终会导致堆栈溢出。而且,递归解决方案更易于编写和理解,正如您所提到的,优雅!

当涉及到递归定义的数据结构时,递归解决方案是最好的解决方案,除非有特殊情况。堆栈空间比开发人员的时间便宜!