在不同级别实现递归和循环

时间:2014-08-13 20:59:26

标签: algorithm loops recursion hardware

我读过帖子,人们说某些编译器会将递归实现为循环,但硬件会将循环实现为递归,反之亦然。如果我的程序中有递归函数和迭代函数,有人可以解释编译器和硬件如何解释每个函数吗?如果实现的选择不明显偏向于使用递归进行mergesort等方法,请同时解决其中一个方面的性能优势。

1 个答案:

答案 0 :(得分:1)

好的,这是一个简短的回答:

1)编译器可以优化尾递归调用。但它通常不是循环,而是堆栈帧重用。但是,我从来没有听说过将循环转换为递归的任何编译器(我没有看到这样做的任何意义:它会使用额外的堆栈空间,可能工作得更慢并且可能导致语义的更改(stackoverflow而不是无限循环))。

2)我想说硬件实现循环是不正确的,因为硬件本身并没有实现循环。它有指令(如条件跳转,算术运算等),用于实现循环。