天天看点

Python入门记录(13)递归函数:我调用我自己

递归函数这里就开始套娃了,跟递归比起来前面什么循环嵌套都是小套娃了,下面先将一些定义。

定义

递归函数就是在函数定义的函数体内调用了这个函数本体,那么这个函数就是一个递归函数。

递归函数必要的组成部分是递归的调用和递归的终止条件,不然的话函数已调用就无尽循环了。

过程

每递归调用一次,都会在栈内分配一个栈帧

每执行完一次函数,都会释放相应的空间

优缺点

缺点:占用内存多,效率低

优点:思路和代码简单,方便理解

举个栗子:

# 项目名:pythonProject2
# NAME:demo16
# 开发时间:2021/4/15 23:57
#递归计算阶乘
def jiecheng(n) :
    if n == 1 :
        return 1
    else:
        res = n*jiecheng(n-1)
        return res
    return
s = jiecheng(6)
print(s)
           

通过编译过程可以发现,递归就是有两个过程,分别是递和归。

递就是向下传递,反复调用函数本身的过程;归就是在碰到了结束递归的条件,在这个例子中就是当n= 1时,一层一层返回上级,将每一次调用函数return的值都再套到上一次调用的函数中,最终到第一次调用的函数的时候,就得出了最后的值。具体分析一下就是:

递:

jiecheng(6)

6jiecheng(5))

65jiecheng(4)

654jiecheng(3)

6543jiecheng(2)

65432*jiecheng(1)

归:

当n=1,jiecehng(1)返回的值为1,层层向上return,得出结果。