一聚教程网:一个值得你收藏的教程网站

热门教程

Python递归函数定义与用法

时间:2022-06-24 19:46:53 编辑:袖梨 来源:一聚教程网

本文实例讲述了Python递归函数定义与用法。分享给大家供大家参考,具体如下:

递归函数

在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。

举个例子,我们来计算阶乘 n! = 1 * 2 * 3 * ... * n,用函数 fact(n)表示,可以看出:

fact(n) = n! = 1 * 2 * 3 * ... * (n-1) * n = (n-1)! * n = fact(n-1) * n

所以,fact(n)可以表示为 n * fact(n-1),只有n=1时需要特殊处理。
于是,fact(n)用递归的方式写出来就是:

 

 代码如下复制代码

deffact(n):

ifn==1:

  return1

returnn*fact(n-1)

 

上面就是一个递归函数。可以试试:

 

 代码如下复制代码

>>> fact(1)

1

>>> fact(5)

120

>>> fact(100)

93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000L

 

如果我们计算fact(5),可以根据函数定义看到计算过程如下:

 

 代码如下复制代码

===> fact(5)

===>5*fact(4)

===>5*(4*fact(3))

===>5*(4*(3*fact(2)))

===>5*(4*(3*(2*fact(1))))

===>5*(4*(3*(2*1)))

===>5*(4*(3*2))

===>5*(4*6)

===>5*24

===>120

 

递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。

使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。可以试试计算

 代码如下复制代码

fact(10000)。

defdigui(n):

  sum=0

  ifn<=0:

    return1

  else:

    returnn*digui(n-1)

print(digui(5))

 

热门栏目