在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。
实际上递归函数是在栈内存上递归执行的,每次递归执行一次就会耗费一些栈内存。
栈内存的大小是限制递归深度的重要因素
求阶乘
计算阶乘n! = 1 x 2 x 3 x … x n,
可以用函数fact(n)表示。
1 |
|
1 |
|
于是,fact(n)用递归的方式写出来就是:
1 |
|
如果计算fact(6),可以根据函数定义看到计算过程如下:
1 2 |
|
运行结果:
斐波拉契级数
有这样一个数列:1,1,2,3,5,8,13,21,34…。其第一元素和第二个元素等于 1,其他元素等于其前面两个元素的和。
例:
1 2 3 4 5 |
|
运行结果:
递归函数的优点
定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。
递归需要注意递归的深度。由于递归会产生多次函数调用,而函数调用会消耗代码的栈空间,如果递归的深度太大,会导致栈溢出。以上面的阶乘为例,如果计算 100000 的阶乘,在一般机器上都会出现栈溢出的问题。
1 |
|
如下所示:
本文基于Python基础。Python标准的解释器没有针对尾递归做优化,任何递归函数都存在栈溢出。介绍了在使用递归函数的优缺点,优点是逻辑简单清晰,缺点是过深的调用会导致栈溢出。
以上是一篇文章带你了解Python递归函数的详细内容。更多信息请关注PHP中文网其他相关文章!