=============================
栈
- 每当调用函数时,计算机会将函数调用设计的所有变量存贮到内存中。
- 在函数内调用函数时,内部的函数在调用完成后会返回到上一次函数并且会被踢出栈堆。未完成的函数不会被踢出栈堆。
- 创建递归函数时刻要记得基线条件和递归条件
一段关于栈的代码解读
def fact(x):
if x==1: return 1
else: return x*fact(x-1)
代码解读:(以x=3为例)
- 当x=3,程序进入了else条件并且执行递归,随后创建了x=2的内存块被将其放入栈堆中。
- 执行x=2的函数,因为此时x不等于1所以还是进入了else条件执行递归,随后创建了x=1的内存块并将其放入栈堆中。
- 此时x=1则进入第一个条件返回1,该轮函数执行完毕被踢出栈堆,同时上一层函数也因为该函数的结束而结束,被踢出栈堆,后面以此类推。
- 在此函数中,
x==1
为基线条件,它决定了什么时候跳出递归循环。而else
为递归条件,它决定了递归中执行操作来慢慢接近基线条件。
小结
- 递归有两种操作,压入和弹出
- 每个递归函数都有两个条件:基线条件和递归条件
- 所有的函数调用都将进入调用栈