递归与非递归算法??

时间:2021-11-12 04:13:04
今天看数据结构,看到有将递归算法转换为非递归算法, 可是计算机不是本身就是用栈来存储函数,本身就是用非递归方法处理的递归函数吗?  为什么我们还要自己转成非递归算法???

8 个解决方案

#1


一般程序调用方法的栈,和你自己建立的数据结构的栈,在不同的内存段,拿张os系统的内存分配图看一下,你会发现,基本每个系统供程序调用的栈的空间都是有限的。这意味着每个系统对每个调用程序的分配的栈空间都是有限的。有些系统允许你去改动这个限制,但总的来说,它是有限的。

一般编程都不鼓励使用递归,不仅是效率问题,更严重的是有可能发生运行时错误,也就是程序崩溃。而你为数据分配的空间就不一样了,那个空间基本只受两个条件限制:1.计算机的位宽,也就是寻址范围,2.计算机本机的内存限制

#2


有时候,递归算法的计算复杂性要大于非递归的。
有些算法要求有显式表示,这时只能用非递归算法。

#3


stl里递归也照用不误

#4


递归和人的思维比较接近。我的感觉。
比如遍历树或快速排序,用递归很好理解,非递归就看起来麻烦。

#5


引用 1 楼 tkminigame 的回复:
一般程序调用方法的栈,和你自己建立的数据结构的栈,在不同的内存段,拿张os系统的内存分配图看一下,你会发现,基本每个系统供程序调用的栈的空间都是有限的。这意味着每个系统对每个调用程序的分配的栈空间都是有限的。有些系统允许你去改动这个限制,但总的来说,它是有限的。

一般编程都不鼓励使用递归,不仅是效率问题,更严重的是有可能发生运行时错误,也就是程序崩溃。而你为数据分配……

++

#6


递推比较容易理解,但是递归 时间复杂度太大,做了很多多余的工作,甚至会导致*

#7


编译器对递归算法的优化有许多限制。

#8


递归不太好用,难把握

#1


一般程序调用方法的栈,和你自己建立的数据结构的栈,在不同的内存段,拿张os系统的内存分配图看一下,你会发现,基本每个系统供程序调用的栈的空间都是有限的。这意味着每个系统对每个调用程序的分配的栈空间都是有限的。有些系统允许你去改动这个限制,但总的来说,它是有限的。

一般编程都不鼓励使用递归,不仅是效率问题,更严重的是有可能发生运行时错误,也就是程序崩溃。而你为数据分配的空间就不一样了,那个空间基本只受两个条件限制:1.计算机的位宽,也就是寻址范围,2.计算机本机的内存限制

#2


有时候,递归算法的计算复杂性要大于非递归的。
有些算法要求有显式表示,这时只能用非递归算法。

#3


stl里递归也照用不误

#4


递归和人的思维比较接近。我的感觉。
比如遍历树或快速排序,用递归很好理解,非递归就看起来麻烦。

#5


引用 1 楼 tkminigame 的回复:
一般程序调用方法的栈,和你自己建立的数据结构的栈,在不同的内存段,拿张os系统的内存分配图看一下,你会发现,基本每个系统供程序调用的栈的空间都是有限的。这意味着每个系统对每个调用程序的分配的栈空间都是有限的。有些系统允许你去改动这个限制,但总的来说,它是有限的。

一般编程都不鼓励使用递归,不仅是效率问题,更严重的是有可能发生运行时错误,也就是程序崩溃。而你为数据分配……

++

#6


递推比较容易理解,但是递归 时间复杂度太大,做了很多多余的工作,甚至会导致*

#7


编译器对递归算法的优化有许多限制。

#8


递归不太好用,难把握