Python 中的递归函数

PythonBeginner
立即练习

介绍

欢迎来到神秘的派索尼亚王国,这是一个以先进运用魔法和数学结构而闻名的伟大帝国。作为王国的首席皇家卫士,你的任务是保卫帝国最珍贵的神器:递归水晶。传说它是用一种古老的代码制作而成,该代码自身循环以创造无限的能量源。为了更好地理解和保护这件神器,你必须掌握 Python 中的递归艺术——正是用于创造它的这项技能。

你的目标将是运用递归的力量来解决传统方法难以轻易解决的复杂问题。通过这样做,你将确保帝国的财富和知识安全,防止那些企图滥用它们的人。准备好踏上一段穿越时间和代码的旅程,揭开递归函数的奥秘。

理解递归

在这一步中,你将学习递归的基本概念以及如何在 Python 中实现它。递归函数是指调用自身来解决问题的函数。设计递归函数的关键在于确保它有一个基线条件(base case),即停止递归的条件,以及一个递归条件(recursive case),即函数调用自身的地方。

让我们从创建一个计算数字阶乘的简单递归函数开始。数字 n 的阶乘是所有小于或等于 n 的正整数的乘积。

在你喜欢的文本编辑器中打开 ~/project/factorial.py 并添加以下代码:

def factorial(n):
    if n == 0:  ## 基线条件
        return 1
    else:        ## 递归条件
        return n * factorial(n - 1)

## 示例用法
print(factorial(5))

要运行代码,请使用以下命令:

python3 factorial.py

预期结果应该是 120,因为 5! = 5 * 4 * 3 * 2 * 1 = 120

具有多个基线条件的递归

接下来,你将学习如何构建一个具有多个基线条件的递归函数。让我们在名为 fibonacci.py 的文件中创建一个函数 fibonacci,它将计算第 n 个数字之前的斐波那契数列。斐波那契数列是一系列数字,其中每个数字都是前两个数字之和,从 0 和 1 开始。

~/project/fibonacci.py 中输入以下代码:

def fibonacci(n):
    if n == 0:  ## 第一个基线条件
        return 0
    elif n == 1:  ## 第二个基线条件
        return 1
    else:         ## 递归条件
        return fibonacci(n - 1) + fibonacci(n - 2)

## 示例用法
print(fibonacci(10))

使用以下命令执行代码:

python3 fibonacci.py

预期输出应该是 55,因为它是斐波那契数列中的第 10 个数字。

总结

在这个实验中,我们通过将递归应用于两个不同的数学序列,深入探究了 Python 中的递归概念。设计思路围绕创造一个引人入胜的故事情节展开,让学习递归变得有趣且有意义。任务从阶乘的简单单基线条件逐步搭建到斐波那契数列中稍微复杂的多基线条件场景,以确保全面理解。

到实验结束时,你不仅熟练掌握了编写递归函数,还理解了基线条件的重要性以及递归调用背后的机制。你现在掌握了利用递归算法解决实际问题的关键,这项技能如同派索尼亚神话中的递归水晶一样珍贵。