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)修改。但一般不建议设置过大的递归深度,可能导致程序崩溃。

标签: 递归函数 阶乘 斐波那契 递归深度 Python基础

本文涉及AI创作

内容由AI创作,请仔细甄别

list快速访问

上一篇: Python装饰器进阶 - 带参数装饰器与类装饰器 下一篇: Python lambda表达式 - 匿名函数

poll相关推荐