一、递归的核心在于基线条件和递归条件
例如:下面是一个由1加到n的函数:
def add_self(n):
if n<=1:
return n
else:
return n+add_self(n-1)
其中,第二行的if就是基线条件,else就是递归条件。
二、调用栈
递归在计算机的内部的实现是通过调用栈实现的。当函数进入递归,调用第二个函数的时候,第一个函数暂停状态且处于未完成的状态,该函数的所有变量的值都还存在内存当中。此时,栈的高度+1,变为2(此时已经进入第二个函数)。这个用于存储多个函数的变量的栈,称做调用栈。注意,各个栈之间的变量名虽然可能相同,但是互不相关,且栈之间的变量不能相互调用与访问。当到达基线条件之后,递归将沿着调用栈返回,意味着后最后压入的栈,将最先弹出。(栈有两种操作:压入与弹出)
三、与循环对比
通常,很多递归能完成的算法,循环也可以完成,例如上述1加到n的函数,用循环实现:
def add_self(n):
total=0
while n>=0:
total+=n
n-=1
return total