5

或者说,多核 CPU 处理递归是否比迭代快?

还是仅仅取决于一种语言在机器上的运行方式?与执行简单迭代相比,像 c 执行函数调用的成本很高。

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

编辑:

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

10 月 12 日编辑:

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

4

2 回答 2

2

真的有两种方法来看待这个问题:

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

2.从函数式编程的角度来看,大多数时候递归函数被编写为没有副作用。(在递归函数中存在副作用将使其很难产生正确的结果。)如果函数没有副作用,那么并行化是微不足道的(因此更容易在多核系统上运行)。这不是递归函数本身的属性,但这可能是您的朋友认为递归比迭代更快的原因。

于 2012-09-25T07:05:11.093 回答
1

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

于 2012-09-25T06:12:04.023 回答