看到有面经提到了这道题,之前简单想了下,拿二叉树前序遍历来说,迭代和递归本质上都用到了栈,只不过后者用的是进程栈,所以速度比较慢,因为这个栈中还要存返回地址、局部变量和寄存器等。
但是今天又反应了以下,二者的差别不仅仅是速度的问题,在C++中,迭代使用的栈是标准库提供的,是配接器,底层使用的是vector,而vector的数据是存在堆上的(通过标准库的allocator分配空间);而如果是递归,使用的是栈区,比堆小很多,如果递归次数过多,造成栈帧太多,很容易栈溢出。所以迭代能比递归进行更多的层数。