最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
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)) |
相关文章
- 以闪亮之名店长体验流霞季怎么玩 缘溪临霞套装活动介绍 12-31
- 未定事件簿旧梦新生左然篇怎么玩 旧梦新生左然篇活动介绍 12-31
- 未定事件簿左然破浪远行怎么样 12-31
- 桃源深处有人家行医问诊怎么玩 12-31
- 恋与制作人跨年福利有哪些 恋与制作人跨年福利内容介绍 12-31
- 阴阳师协同对弈大乱斗怎么玩 阴阳师协同对弈大乱斗活动介绍 12-31