python基础之递归函数

yizhihongxing

Python基础之递归函数

什么是递归函数?

递归函数是指在函数定义中包含对函数本身的调用的函数,这种函数也被称为递归函数。

递归函数在循环和条件语句无法很好地解决问题时非常有用。例如,当解决涉及到树状结构或分治问题时,递归函数非常适用。

递归函数的特点

递归函数有以下特点:

  • 函数在定义中调用自己。
  • 递归函数需要有一个停止条件,避免形成无限循环。
  • 递归函数可以有多个递归调用。

递归函数的使用

下面通过两个示例介绍递归函数的使用。

示例1:计算阶乘

阶乘是指一个非负整数$n$的阶乘,表示为$n!$等于$n$乘以$n-1$乘以$n-2$……1。特别的,$0!=1$。阶乘是一个非常典型的递归问题。

以下是计算阶乘的递归函数:

def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n - 1)

在这个函数中,当$n=0$时,函数返回$1$,否则函数返回$n$和$factorial(n-1)$的乘积。

接下来,我们调用这个函数:

print(factorial(5)) # 5 * 4 * 3 * 2 * 1 = 120

输出:

120

示例2:二分查找

假设我们有一个有序数组arr和要查找的元素x,现在需要在这个数组中查找元素x的位置。二分查找是一种典型的使用递归实现的算法。

以下是二分查找的递归函数:

def binary_search(arr, x, low, high):
    if high >= low:
        mid = (high + low) // 2
        if arr[mid] == x:
            return mid
        elif arr[mid] > x:
            return binary_search(arr, x, low, mid-1)
        else:
            return binary_search(arr, x, mid+1, high)
    else:
        return -1

在这个函数中,我们首先检查$high$是否大于或等于$low$。如果不是,则返回-1,表示没有找到指定元素;如果是,则按如下步骤继续查找:

  • 找到数组中央的元素的下标$mid$(用Python的整数除法符号$//$可以向下取整)。
  • 如果中央元素等于要查找的元素$x$,则返回中央元素下标$mid$。
  • 如果中央元素大于要查找的元素$x$,则递归地调用$binary_search$函数在数组的左半部分继续查找。
  • 如果中央元素小于要查找的元素$x$,则递归地调用$binary_search$函数在数组的右半部分继续查找。

接下来,我们调用这个函数:

arr = [2, 3, 4, 10, 40]
x = 10
result = binary_search(arr, x, 0, len(arr)-1)

if result != -1:
    print("元素在数组中的下标为", result)
else:
    print("元素不在数组中")

输出:

元素在数组中的下标为 3

总结

递归函数是一种在函数定义中包含对函数本身的调用的函数。递归的应用范围很广,例如计算阶乘、二分查找等等。需要注意的是,递归函数需要有一个停止条件,避免形成无限循环。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python基础之递归函数 - Python技术站

(0)
上一篇 2023年6月5日
下一篇 2023年6月5日

相关文章

  • Python for Informatics 第11章之正则表达式(四)

    以下是“PythonforInformatics第11章之正则表达式(四)”的完整攻略: 一、问题描述 在PythonforInformatics第11章中,我们学习了如何使用Python的re模块进行正则表达式匹配。本文将详细讲解PythonforInformatics第11章之正则表达式(四),并提供两个示例说明。 二、解决方案 2.1 re模块中的su…

    python 2023年5月14日
    00
  • Jupyter导入自定义模块及导入后TypeError错误问题及解决

    在Jupyter中导入自定义模块时,需要注意几个问题,本攻略将会详细讲解这些问题及解决方法。 1. 添加自定义模块目录到sys.path 在导入自定义模块时,我们需要先将自定义模块目录添加到sys.path环境变量中,否则Python解释器会无法找到目标模块。可以通过以下方法来添加自定义模块目录: import sys sys.path.append(‘/p…

    python 2023年5月13日
    00
  • 通过python获取注册域名

    【问题标题】:Get registered domains by python通过python获取注册域名 【发布时间】:2023-04-02 14:35:02 【问题描述】: 我想在 whois 域上做一个 python 程序。 我想获取每天在whois域中注册的信息。 寻找有一个whois library。 但是好像不能搜索每天获得的域名。 有没有办法在…

    Python开发 2023年4月8日
    00
  • python简单的函数定义和用法实例

    好的。首先,让我们对函数的概念进行简单的说明。函数是一段代码的块,用来执行特定的任务。通过定义函数,我们可以将代码脚本分割为较小的模块,使它们易于开发、调试、测试和维护。在python中,函数是通过def语句来定义的。 下面,我们将通过示例说明python中函数的定义和用法。 函数定义 函数的一般格式如下: def function_name(paramet…

    python 2023年5月19日
    00
  • 将pandas.dataframe的数据写入到文件中的方法

    当我们使用pandas进行数据处理时,通常需要将处理后的数据保存到文件中,以便后续的使用或分享。在pandas中,我们可以使用to_csv()方法将DataFrame写入到CSV文件中,也可以使用to_excel()方法将DataFrame写入到Excel文件中。下面是详细讲解“将pandas.dataframe的数据写入到文件中的方法”的完整攻略: 一、将…

    python 2023年6月3日
    00
  • 利用webqq协议使用python登录qq发消息源码参考

    使用webqq协议可以通过Python代码登录QQ账号,并且发送消息,下面是实现这一功能的完整攻略。 环境搭建 在使用Python进行webqq协议操作之前,需要安装相关的Python库,比如requests和beautifulsoup4,可以通过以下指令进行安装: pip install requests beautifulsoup4 登录QQ 使用Pyt…

    python 2023年6月3日
    00
  • 如何在Python中查询Redis数据库中的数据?

    以下是在Python中查询Redis数据库中的数据的完整使用攻略。 使用Redis数据库的前提条件 在使用Python连接Redis数据库之前,需要确保已经安装Redis数据库,并已经创建使用的数据库,同时需要安装Python的驱动程序,例如redis。 步骤1:导入模块 在Python中使用redis模块连接Redis数据库。以下是导入redis模块的基本…

    python 2023年5月12日
    00
  • python__name__原理及用法详解

    Python name 原理及用法详解 在 Python 中,__name__ 是一个特殊的变量,在不同的情况下功能不同。本文将详细介绍 __name__ 的原理及用法,帮助读者理解并正确使用该变量。 name 原理 在 Python 中,每个模块(module)都有一个内置的名称变量 __name__,该变量的值取决于模块是被导入还是被直接执行。当模块被直…

    python 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部