与多核时代的迭代相比,递归更受欢迎吗



或者说,多核CPU处理递归的速度比迭代快吗?

或者它只是取决于一种语言如何在机器上运行?与进行简单迭代相比,c执行的函数调用开销很大。

我之所以有这个问题,是因为有一天我告诉我的一个朋友,递归并不是任何可以加速程序的神奇魔法,他告诉我,使用多核CPU,递归可以比迭代更快。

编辑:

如果我们考虑最喜欢递归的情况(数据结构、函数调用),递归是否可能更快

10月12日编辑:

那么多核cpu目前的表现如何呢?现在的软件都是为多核cpu编程的吗?

实际上有两种方法来看待这个问题:

1.纯粹看编译后的代码,是的,迭代比递归快。这是因为递归增加了函数调用(=开销),而迭代没有。然而,一种常见的递归类型是尾递归:递归调用在函数末尾进行。编译器总是针对迭代进行优化。因此,在这种情况下,这并不重要。埃尔戈:在某些情况下,递归速度较慢,但它永远不会更快。

2.从函数编程的角度来看,大多数时间递归函数都是为了没有副作用而编写的。(递归函数中有副作用会使它很难产生正确的结果。)如果函数没有副作用,那么并行化就很简单(因此更容易在多核系统上运行)。这不是递归函数本身的性质,但这可能是你的朋友认为递归可能比迭代更快的原因。

虽然递归很优雅,数学上也很漂亮,但它消耗了大量资源,尤其是内存。如果你有一个有效的迭代解决方案,你应该去做。

最新更新