通过stack模拟系统栈相比于直接使用递归有什么优势吗?

来源:6-3 运用栈模拟递归

weixin_慕虎2426614

2020-12-05

我立即直接使用递归主要的问题是递归层数受限,那通过stack来模拟系统栈理论上也有相同的限制,那为什么我们要使用这种方式呢?

写回答

1回答

liuyubobobo

2020-12-05

通常非递归的效率是比递归高的,不过这一点在现代计算机上已经不明显了;


如果在递归过程中有额外的开空间操作,他们是开在系统栈上,而非系统堆上,这会导致更快的栈溢出。但是这个问题是可以一定程度通过配置编译器设置解决的;


所以,对于现代计算机编程来说,大多数情况下,如果写递归方便,直接写递归就好。


非递归的意义是:

1)在一些特殊条件,如对性能非常敏感的情况下,如嵌入式编程中,只能使用非递归。(一些嵌入式编程环境甚至本身就不支持递归操作);

2)帮助你理解递归的运行原理。因为递归函数在系统内部就是被这样的非递归的方式执行的;

3)在一些非常特殊的情况,如果你不能动系统配置,只能使用非递归。比如在竞赛中,你是不能修改系统的最大栈深度的。这种情况非常少,我仅仅遇到过一次。


继续加油!:)

1
1
weixin_慕虎2426614
谢谢你的解惑
2020-12-05
共1条回复

玩转算法面试-- Leetcode真题分门别类讲解

课程配套大量BAT面试真题,高频算法题解析,强化训练

7408 学习 · 1150 问题

查看课程