python基础之递归函数

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数据处理-导入导出excel数据

    下面我为你详细讲解Python数据处理-导入导出excel数据的完整实例教程。 1. 环境准备 首先我们需要安装一些必要的库,包括pandas、openpyxl、xlrd和xlwt。在命令行中输入下面的命令进行安装: pip install pandas openpyxl xlrd xlwt 2. 导入excel数据 2.1 导入Excel文件 导入Exce…

    python 2023年5月13日
    00
  • python追加元素到列表的方法

    在Python中,列表是一种非常常见的数据类型。在实际编程中,经常需要向列表中添加元素。本文将详细讲解Python中追加元素的方法。 使用append方法 可以使用append()方法向列表末尾添加一个元素。下面是一个示例: # 示例1:append()方法向列表中添加元素 lst = [1, 2, 3] lst.append(4) print(lst) #…

    python 2023年5月13日
    00
  • python 获取utc时间转化为本地时间的方法

    获取 UTC 时间并转换成本地时间是 Python 中经常需要的操作,可以使用 datetime 模块中的方法来实现。 首先需要导入相关的模块: import datetime import pytz # 需要安装 pytz。 接下来,获取当前 UTC 时间,可以使用 datetime.datetime.utcnow() 方法: utc_time = dat…

    python 2023年6月2日
    00
  • 为什么这个 Python 脚本在多核上比在单核上运行慢 4 倍

    【问题标题】:Why does this Python script run 4x slower on multiple cores than on a single core为什么这个 Python 脚本在多核上比在单核上运行慢 4 倍 【发布时间】:2023-04-03 11:39:01 【问题描述】: 我试图了解 CPython 的 GIL 是如何工作…

    Python开发 2023年4月8日
    00
  • 以 Python 方式在嵌套元组列表的列表中展平嵌套元组

    【问题标题】:Flatten Nested Tuples in a List of a List of Nested Tuples More Pythonically以 Python 方式在嵌套元组列表的列表中展平嵌套元组 【发布时间】:2023-04-03 09:57:01 【问题描述】: 所以,我生成了一个嵌套元组列表(国际象棋移动验证器的向量)。 ol…

    Python开发 2023年4月8日
    00
  • python可视化之颜色映射详解

    Python可视化之颜色映射详解 什么是颜色映射 颜色映射(Colormap),指将数值映射到颜色的过程。在可视化中,颜色映射常用于展示数据,将数据的大小、变化等信息通过颜色呈现出来,使图形更易于理解。 可视化库中的颜色映射 在 Python 的可视化库中,通常支持以下几种颜色映射: 顺序型:用于表示数据的大小变化,如 viridis; 发散型:用于表示数据…

    python 2023年6月3日
    00
  • 在Python中利用pickle保存变量的实例

    保存变量在Python中非常简单,可以使用Pickle模块,它可以将任何Python对象序列化为字符串(字节流),也可以将其反序列化回原始对象。在这里,我们将讨论如何使用Pickle保存变量的实例。 要使用Pickle,您需要首先导入它。示例如下: import pickle 保存变量的实例 我们可以使用Pickle保存Python对象。通过使用Pickle…

    python 2023年6月2日
    00
  • 基于Python实现商场抽奖小系统

    下面是基于Python实现商场抽奖小系统的完整攻略: 1. 确定系统需求 在开始编写代码前,我们需要先明确这个抽奖小系统需要具备哪些功能,例如: 能够生成一定数量的奖品,并将奖品存储在数据库中 能够在数据库中添加、删除、修改奖品的信息 能够在抽奖时从数据库中获取奖品信息,并展示给用户 能够实现抽奖过程,并在最终抽中奖品后将相关信息存储在数据库中 能够展示抽奖…

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