优点:
- 代码简洁。
- 易于理解
缺点:
1、时间和空间的消耗比较大:
递归由于是函数调用自身,而函数调用是消耗时间和空间的。每一次函数调用,都需要在内存栈中分配空间以保存参数,返回值和临时变量。而往栈中压入和弹出数据也都需要时间,所以降低了效率。
2、重复计算:
递归中又很多计算都是重复的,递归的本质时把一个问题分解成两个或多个问题,多个问题存在重叠的部分,即存在重复计算。
如斐波那契数列的递归实现。
3、栈溢出:
递归可能存在栈溢出,每次调用时都会在内存栈中分配空间。
而栈空间的容量是有限的,当调用的次数太多,就可能会超出栈的容量,造成调用栈溢出。