首页 新闻 搜索 专区 学院

请高手帮忙讲讲C#中递归的内存分配情况,优缺点。

0
[已解决问题] 解决于 2013-06-06 16:47

前段写的程序使用了递归,被老大问道,为什么使用递归,知道递归的内存,堆栈分配情况吗,以前只觉的递归很好用,这次能用上就用了,没想到被嘲笑了一翻,心里很是不爽,请高手帮忙讲讲,我在网上搜了搜,说是分配内存空间是调用次数和第一次所用内存的乘积,是这样的吗,具体是怎样的?请高手指教,谢谢!

问题补充:

大家针对我的问题进行回答啊。

code先生-null的主页 code先生-null | 菜鸟二级 | 园豆:307
提问于:2012-01-31 11:18
< >
分享
最佳答案
0

递归有是否尾递归之分,如果是尾递归的话就不用考虑内存分配的问题。并且只要你递归的不深,适当的使用递归都不是问题,同时使用递归阅读起来还是容易理解一点。

奖励园豆:5
小小刀 | 小虾三级 |园豆:1991 | 2012-01-31 12:26
其他回答(3)
0

递归也是一次方法调用,只不过调用的是本身这个方法,所以内存分配没什么特殊的,跟普通方法调用一样。

水牛刀刀 | 园豆:6350 (大侠五级) | 2012-01-31 12:32
1

一般来说,每个递归算法都可以转化为递推算法。且递归层数有可能受到具体语言的限制,良好设计的递推算法应该比递归效率高(递推时你自己进行栈的管理,有可能节约若干内存,也有可能节约不必要的压栈和出栈操作)。每次递归调用也涉及到当前的局部变量、实际参数、返回地址等的压栈,有可能压入了不需要保存的无关变量。机器不知道你的方法内哪些东西是不需要保存的,只能全部保存。内存空间有栈空间和堆空间,每次调用的栈空间可能固定,但是堆空间就不一定了。

ChatinCode | 园豆:2272 (老鸟四级) | 2012-01-31 13:49

听说递归时,没调一次方法就会分配一次内存,比如一次需要分配x,那么调十次就是10x,是这样的吗?

支持(0) 反对(0) code先生-null | 园豆:307 (菜鸟二级) | 2012-06-19 09:57
0

个人感觉就是减少方法内的局部变量,尽量写成尾递归的形式,剩下的就交给编译器去优化了。递归比倒推循环什么的好用多了...

Jason Go | 园豆:298 (菜鸟二级) | 2012-02-02 14:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册