递归的特点:
1.直观、简洁,易于理解和实现。
2.适用于问题的规模可以通过递归调用不断减小的情况。
3.可以处理复杂的数据结构和算法,如树和图的遍历。
4.存在栈溢出风险(stack overflow)函数每次调用都会在栈区开辟一个空间存放一般在函数调用次数过多或者死递归的情况下出现(栈空间一般只有8MB,所以递归层数不宜过深,一般不超过1e6层)
循环的特点:
1.直接控制流程,效率较高。
2.适用于问题的规模没有明显的缩减,或者需要特定的选代次数。
3.适合处理大部分的动态规划问题。
在部分情况下,递归和循环可以相互转化。
4.代码量可能较大。
能相互转化循环与递归的优先使用谁:
一般能用递归解决的问题就用递归(代码量小) 但是递归存在明显的效率问题和栈溢出的风险 那么优先使用循环
以求斐波那契数列的第n个数值代码为例
下面↓是用递归写的

下面↓是用循环写的

但是当我们输入40时 可以显而易见的是用递归写的代码运算速度完全慢于用循环运算的速度 这是为什么呢?
显然 当用递归时存在着大量重复的运算
让我们写出来递归的简单过程

最低0.47元/天 解锁文章
1180





