我读过一些文章,人们说某些编译器将递归实现为循环,而硬件实现循环为递归,反之亦然。如果我的程序中有一个递归函数和一个迭代函数,请有人解释一下编译器和硬件将如何解释每个函数吗?如果对实现的选择显然不倾向于一种方法,比如使用递归进行合并,那么还请说明其中一种方法比另一种方法的性能优势。
发布于 2014-08-13 22:00:47
好的,以下是一个简短的回答:
1)编译器可以优化尾递归调用。但是它通常不是循环,而是堆栈帧重用。但是,我从未听说过任何编译器会将循环转换为递归(我也不认为这样做有任何意义:它将使用额外的堆栈空间,可能会更慢地工作,并可能导致语义的更改(堆栈溢出而不是无限循环))。
2)我想说的是,说硬件实现循环是不正确的,因为硬件本身没有实现循环。它有用于实现循环的指令(如条件跳转、算术运算等)。
https://stackoverflow.com/questions/25296017
复制相似问题