递归:
可以让程序更容易理解,然而循环可以使程序的性能提高。
每个递归函数都要有两部分:
基线条件
指的是函数不再调用自己,避免死循环
##### 递归条件
指的是函数调用它本身
## 递归调用栈
递归函数也使用调用栈,例子如下:
def fact(x):
if x == 1:
return 1
else:
return x * fact(x-1)
内存中的具体分析如下:
虽然使用栈很方便,但是也要付出代价:存储详尽的信息可能要占用大量的内存资源。每个函数的调用都要占用一定的内存,如果栈很高的话,就意味着计算机存储了大量的调用信息。有两种选择:
- 重新编写代码,利用循环实现
- 使用尾递归。(在后面的学习中,我会详细介绍)
小结:
- 递归指的是自己调用自己的函数
- 每个递归函数必须包含两个条件:基线条件和递归条件
- 栈有两种操作:压入(push)和弹出(pop)
- 所有的函数调用都进入调用栈
- 调用栈可能很长,占用大量的内存资源。