优缺点: 循环效率更高,递归容易理解 是大家普遍的观点。尽管两种想法在时间复杂度和空间复杂度上是等价的。但递归的有一个弱势:函数调用开销如参数传递和堆栈之类的开销,会导致在层次过深的时候,系统崩溃。递归是用栈机制实现的(c++),每深入一层,都要占去一块栈数据区域,对嵌套层数深的一些算法,递归会力不从心,空间上会以内存崩溃而告终,而且递归也带来了大量的函数调用,这也有许多额外的时间开销。所以在深度大时,它的时空性就不好了。 循环的运行时间只因循环次数增加而增加,没什么额外开销。空间上没有什么增加。 相互转化: 可以相互转化,但是循环转化成递归更容易想;一般尾递归(即最后一句话进行递归)和单向递归(函数中只有一个递归调用地方)都可以用循环来避免递归。更复杂的情况则要引入栈来进行压栈出栈来改造成非递归,这个栈不一定要严格引入栈数据结构,只需要有这样的思路,用数组什么的就可以。 |
循环与递归
最新推荐文章于 2022-11-22 15:32:56 发布