递归虽然有简洁的优点,但它同时也有显著的缺点。
递归由于是调用自身,而函数调用是有时间和空间的消耗;
每一次函数调用,都需要在内存栈中分配空间以保存参数,
返回地址及临时变量,而且往栈里压入数据和弹出数据都需要时间,
这就不难理解递归实现的效率不如循环。递归中有可能很多计算是重复的,
从而对性能带来很大的负面影响,递归的本质是把一个问题分解成为两个或者
多个小问题。如果多个小问题存在相互重叠的部分,那么就存在重复的计算。
如果斐波那契数列,其时间复杂度是指数倍,是非常bad~
斐波那契数列:
–
F
1
= F
2
= 1;
–
F
n
= F
n
−1
+ F