循环与递归

本文探讨了递归与循环在算法实现中的优缺点,并详细解释了它们之间的相互转换方法。递归易于理解但在深度较大时可能导致内存崩溃,而循环则更为高效且没有额外开销。此外还介绍了如何将递归转化为非递归形式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

优缺点:

循环效率更高,递归容易理解 是大家普遍的观点。尽管两种想法在时间复杂度和空间复杂度上是等价的。但递归的有一个弱势:函数调用开销如参数传递和堆栈之类的开销,会导致在层次过深的时候,系统崩溃。递归是用栈机制实现的(c++),每深入一层,都要占去一块栈数据区域,对嵌套层数深的一些算法,递归会力不从心,空间上会以内存崩溃而告终,而且递归也带来了大量的函数调用,这也有许多额外的时间开销。所以在深度大时,它的时空性就不好了。 循环的运行时间只因循环次数增加而增加,没什么额外开销。空间上没有什么增加。

相互转化:

可以相互转化,但是循环转化成递归更容易想;一般尾递归(即最后一句话进行递归)和单向递归(函数中只有一个递归调用地方)都可以用循环来避免递归。更复杂的情况则要引入栈来进行压栈出栈来改造成非递归,这个栈不一定要严格引入栈数据结构,只需要有这样的思路,用数组什么的就可以。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值