您现在的位置是:亿华云 > 应用开发
一篇文章带你了解Python递归函数
亿华云2025-10-02 08:56:46【应用开发】4人已围观
简介一、什么是递归函数?在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。二、函数的递归调用原理实际上递归函数是在栈内存上递归执行的,每次递归执行一次就会耗费一些栈内存。
一、篇文什么是章带递归函数?
在函数内部,可以调用其他函数。归函如果一个函数在内部调用自身本身,篇文这个函数就是章带递归函数。
二、归函函数的篇文递归调用原理
实际上递归函数是在栈内存上递归执行的,每次递归执行一次就会耗费一些栈内存。章带
栈内存的归函大小是限制递归深度的重要因素
三、案例分析
1.求阶乘
计算阶乘n! = 1 x 2 x 3 x … x n,篇文
可以用函数fact(n)表示。章带
fact(n) = n! = 1 x 2 x 3 x … x (n-1) x n = (n-1)! x n = fact(n-1) x nfact(n)可以表示为n x fact(n-1),归函只有n=1时需要特殊处理。篇文
于是章带,fact(n)用递归的归函方式写出来就是:
def fact(n): if n == 1: return 1 return n * fact(n - 1)如果计算fact(6),可以根据函数定义看到计算过程如下:
def fac(n): if n==1: return 1 else: res=n*fac(n-1) return res print(fac(6))运行结果:
2.斐波拉契级数
有这样一个数列:1,1,2,3,5,云服务器提供商8,13,21,34…。其第一元素和第二个元素等于 1,其他元素等于其前面两个元素的和。
例:
def fab(n): # 定义斐波拉契级数 if n in [1, 2]: # 如果n=1或者2 return 1 return fab(n - 1) + fab(n - 2) # n>2 print(fab(1)) # 斐波拉契级数的第一个元素 print(fab(2)) # 斐波拉契级数的第二个元素 print(fab(8)) # 斐波拉契级数的第8个元素 print(fab(13)) # 斐波拉契级数的第9个元素运行结果:
3.递归函数的优点
定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。
递归需要注意递归的深度。由于递归会产生多次函数调用,而函数调用会消耗代码的栈空间,如果递归的深度太大,会导致栈溢出。以上面的阶乘为例,亿华云如果计算 100000 的阶乘,在一般机器上都会出现栈溢出的问题。
print(fac(10000))如下所示:
四、总结
本文基于Python基础。Python标准的解释器没有针对尾递归做优化,任何递归函数都存在栈溢出。介绍了在使用递归函数的优缺点,优点是逻辑简单清晰,缺点是过深的调用会导致栈溢出。
在实际案例中,针对尾递归优化的语言可以通过尾递归防止栈溢出。尾递归事实上和循环是等价的,没有循环语句的编程语言只能通过尾递归实现循环,进行详细的讲解。
使用Python语言,希望能够帮助你更好的学习。
很赞哦!(11)