说到递归,总会提到这么几个问题:
递归和迭代的区别是什么?
答:迭代式调别人,而递归是调自己
递归能不能改为迭代?
答:可以
那么递归的实质是什么?今天就说一下递归的实质
1.递归的实质:压系统栈
压到栈里的是当前的所有信息,包括当前跑到多少行,当前的参数和函数内的参数变量,等等
返回后再进行弹栈,然后读取弹栈后栈顶空间的信息,也就是返回到调用的地方。
我们也常常会说,递归可能会导致内存溢出也就是因为栈太过深了才可能会导致内存溢出。
递归可以改成迭代的原因就是,递归是系统在帮我们压栈,我们当然可以自己去申请栈空间进行操作,所以当然是可以改成迭代的。
2.递归空间复杂度
一般的空间复杂度可以使用master公式计算:
T(N) = aT(n/b) + O(N^d)
T(N):父问题的样本量
a:调用模块发生的次数
T(N/b):子问题的样本量
O(N^d):除去子问题调