pin_drop当前位置:知识文库 ❯ 图文
Python递归函数 - 阶乘与斐波那契数列
概述
递归函数是指在函数体内调用自身函数。递归必须有终止条件(基线条件),否则会导致无限递归。递归适合解决可以分解为相似子问题的场景。
语法
代码示例
def recursive_func():
if base_case:
return base_result
return recursive_func(modified_args)阶乘计算
代码示例
def factorial(n):
if n == 0:
return 1
return n * factorial(n - 1)
print(factorial(5))斐波那契数列
代码示例
def fibonacci(n):
if n <= 1:
return n
return fibonacci(n - 1) + fibonacci(n - 2)
for i in range(10):
print(fibonacci(i), end=" ")递归的注意事项
代码示例
import sys
print(f"最大递归深度: {sys.getrecursionlimit()}")
def countdown(n):
if n <= 0:
print("发射!")
return
print(n)
countdown(n - 1)
countdown(5)注意事项
提示:递归必须有终止条件。递归深度受限制,默认1000层。递归可能效率较低,可用迭代替代。递归适合树形结构和分治算法。
小结
-
递归函数在函数体内调用自身
-
必须有终止条件(基线条件)
-
递归深度有限制
-
递归适合分解为相似子问题的场景
练习题
练习1
编写递归函数sum_recursive(n)计算1到n的和
练习2
编写递归函数reverse_string(s)反转字符串
常见问题
递归函数为什么会发生栈溢出?
每次函数调用都会在调用栈上分配新的栈帧。如果没有正确的终止条件,递归会无限进行下去,最终耗尽栈空间导致栈溢出错误。Python默认递归深度限制为1000层。
递归和迭代有什么区别?
递归通过函数自身调用来实现循环,而迭代使用循环语句(如for、while)。递归通常更简洁直观,但迭代在性能上更优,不会受到递归深度的限制。
斐波那契数列的递归实现有什么性能问题?
简单的递归斐波那契实现会重复计算相同的子问题,时间复杂度为O(2^n)。可以使用记忆化(缓存)或动态规划来优化,将时间复杂度降至O(n)。
如何查看和修改Python的最大递归深度?
使用sys.getrecursionlimit()查看当前限制,使用sys.setrecursionlimit(n)修改。但一般不建议设置过大的递归深度,可能导致程序崩溃。
本文涉及AI创作
内容由AI创作,请仔细甄别