概念
函数中有一种特殊的函数,叫做递归函数.递归函数的本质是调用自身.
栈(stack)
要理解递归的概念,就需要先介绍一个叫做栈的编程概念.
栈是一种简单的数据结构,甚至可以简单的将其想象成一个队列.
如上图所示:
我们将6,7分别依次放入队列,这叫入栈.
现在我们要拿到1,那么只能先将7,6,5,...2分别取队列,才能拿到1.这叫出栈.
很明显,这个栈的顺序是后进先出.
这个形式就是递归函数在内存中的调用方式.
基线条件和递归条件
前面提到了,递归函数就是自己调用自己.
现在来看递归函数的伪代码:
def func(n):
if some_conditione:#基线条件
return n
else: #递归条件
func(n-1)
递归函数的调用就像栈的出栈和入栈一样.
在这段为代码中,递归条件就是指函数调用自身的条件.
基线条件就表示在满足该条件时该函数停止再调用自己,从而避免无限循环.
倒计时递归函数
用一个实际的例子说说明递归函数:
import time
def time_counter(n):
if n==0:
print('时间到')
else:
print(n)
time.sleep(1)
time_counter(n-1)
time_counter(3)
#输出:
3
2
1
时间到