递归与非递归算法??
今天看数据结构,看到有将递归算法转换为非递归算法, 可是计算机不是本身就是用栈来存储函数,本身就是用非递归方法处理的递归函数吗? 为什么我们还要自己转成非递归算法???
[解决办法]
一般程序调用方法的栈,和你自己建立的数据结构的栈,在不同的内存段,拿张os系统的内存分配图看一下,你会发现,基本每个系统供程序调用的栈的空间都是有限的。这意味着每个系统对每个调用程序的分配的栈空间都是有限的。有些系统允许你去改动这个限制,但总的来说,它是有限的。
一般编程都不鼓励使用递归,不仅是效率问题,更严重的是有可能发生运行时错误,也就是程序崩溃。而你为数据分配的空间就不一样了,那个空间基本只受两个条件限制:1.计算机的位宽,也就是寻址范围,2.计算机本机的内存限制
[解决办法]
有时候,递归算法的计算复杂性要大于非递归的。
有些算法要求有显式表示,这时只能用非递归算法。
[解决办法]
递归和人的思维比较接近。我的感觉。
比如遍历树或快速排序,用递归很好理解,非递归就看起来麻烦。
[解决办法]
递推比较容易理解,但是递归 时间复杂度太大,做了很多多余的工作,甚至会导致stackoverflow