通过stack模拟系统栈相比于直接使用递归有什么优势吗?
来源:6-3 运用栈模拟递归
weixin_慕虎2426614
2020-12-05
我立即直接使用递归主要的问题是递归层数受限,那通过stack来模拟系统栈理论上也有相同的限制,那为什么我们要使用这种方式呢?
写回答
1回答
-
通常非递归的效率是比递归高的,不过这一点在现代计算机上已经不明显了;
如果在递归过程中有额外的开空间操作,他们是开在系统栈上,而非系统堆上,这会导致更快的栈溢出。但是这个问题是可以一定程度通过配置编译器设置解决的;
所以,对于现代计算机编程来说,大多数情况下,如果写递归方便,直接写递归就好。
非递归的意义是:
1)在一些特殊条件,如对性能非常敏感的情况下,如嵌入式编程中,只能使用非递归。(一些嵌入式编程环境甚至本身就不支持递归操作);
2)帮助你理解递归的运行原理。因为递归函数在系统内部就是被这样的非递归的方式执行的;
3)在一些非常特殊的情况,如果你不能动系统配置,只能使用非递归。比如在竞赛中,你是不能修改系统的最大栈深度的。这种情况非常少,我仅仅遇到过一次。
继续加油!:)
112020-12-05
相似问题