Function 内置堆栈与手动实现的函数调用堆栈的性能

Function 内置堆栈与手动实现的函数调用堆栈的性能,function,stack,iteration,Function,Stack,Iteration,我一直想知道如何使用堆栈将递归函数转换为迭代函数,例如: 我想知道,从性能的角度来看,这样做是否有任何好处。一方面,它允许非常大的堆栈大小,因此在某些语言中可以避免“超过最大堆栈大小”错误,但这不是性能问题。另一方面,堆栈似乎正在使用更优化的代码,如内置硬件堆栈或类似的东西,因此在切换到函数的迭代版本时可能会有重大损失。性能是指速度吗?如果是这样的话,我会根据语言推荐某种计时器来比较这两个函数,递归还是迭代这取决于语言。虽然您获得了硬件管理堆栈的优势,但也会得到函数调用(参数传递、保存和恢复寄

我一直想知道如何使用堆栈将递归函数转换为迭代函数,例如:


我想知道,从性能的角度来看,这样做是否有任何好处。一方面,它允许非常大的堆栈大小,因此在某些语言中可以避免“超过最大堆栈大小”错误,但这不是性能问题。另一方面,堆栈似乎正在使用更优化的代码,如内置硬件堆栈或类似的东西,因此在切换到函数的迭代版本时可能会有重大损失。

性能是指速度吗?如果是这样的话,我会根据语言推荐某种计时器来比较这两个函数,递归还是迭代这取决于语言。虽然您获得了硬件管理堆栈的优势,但也会得到函数调用(参数传递、保存和恢复寄存器)的开销,并且帧通常比您手动保存的帧大,因此更有可能耗尽一级缓存。此外,几乎肯定会使返回地址预测器溢出。要知道天平是朝哪个方向摆动的,唯一的办法就是试着用两种方法来测量。@RaymondChen谢谢你,这就是我一直在寻找的。