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线程协作threading.Condition实现过程解析

    Python线程协作threading.Condition实现过程解析 在Python多线程编程中,线程之间的协作是非常重要的一部分,它可以实现线程之间的同步和互斥。Python提供了threading.Condition类来实现线程之间的协作,本文将详细讲解Python线程协作threading.Condition实现过程,包括Condition的概念、方…

    python 2023年5月15日
    00
  • Python xlwt工具使用详解,生成excel栏位宽度可自适应内容长度

    下面是Python xlwt工具使用详解的完整实例教程,并包含两个示例说明。 一、xlwt是什么 xlwt是Python编程语言的一个库,用于读取和写入Excel文件。它可以用来创建新的Excel文件,也可以用来修改已有的文件。 二、生成excel栏位宽度可自适应内容长度的方法 下面是生成Excel表格栏位宽度自适应内容长度的方法: 首先,安装xlwt库。使…

    python 2023年5月13日
    00
  • python二分法查找实例代码

    以下是关于“Python二分法查找实例代码”的完整攻略: 简介 二分法查找是一种常用的查找算法,它通过将有序数组分成两部分,每次查找可以将查找范围缩小一半,从而快速定位目标元素。在本教程中,我们将介绍如何使用Python实现二分法查找,并提供两个示例说明。 实现二分法查找 以下是使用Python实现二分法查找的代码: def binary_search(ar…

    python 2023年5月14日
    00
  • 详解Python PIL ImageOps.expand()方法

    敬爱的网站站长,以下是Python PIL ImageOps.expand()方法的完整攻略: 1. 什么是Python PIL ImageOps.expand()方法 Python PIL (Python Imaging Library)是Python语言的一种第三方库,为Python程序提供了图像处理、图像增强等功能。其中,ImageOps模块提供了简单…

    python-answer 2023年3月25日
    00
  • 详解如何用Python登录豆瓣并爬取影评

    本文将详细讲解如何使用Python登录豆瓣并爬取影评的完整攻略。我们将使用requests库和BeautifulSoup库来实现登录和爬取影评的功能。 登录豆瓣 首先,我们需要登录豆瓣,获取登录后的cookie。以下是一个登录豆瓣的示例: import requests # 登录豆瓣 def login_douban(username, password):…

    python 2023年5月15日
    00
  • 55分钟学会正则表达式

    以下是“55分钟学会正则表达式”的完整攻略: 一、正则表达式简介 正则表达式是一种用于匹配字符串的模式。它可以用来检查字符串是否符合某种模式,或者从字符串中提取符合某种模式的子串。正则表达式在文本处理、数据清洗、爬虫等领域都有广泛的应用。 二、正则表达式语法 正则表达式由普通字符和元字符组成。普通字符表示它本身,元字符则表示一些特殊的含义。以下是一些常用的元…

    python 2023年5月14日
    00
  • python爬取微信公众号文章

    Python爬取微信公众号文章是一个非常有用的应用场景,可以帮助用户快速获取自己或他人的公众号文章。本攻略将介绍Python爬取微信公众号文章的完整攻略,包括数据获取、数据处理、数据存储和示例。 步骤1:获取数据 在Python中,我们可以使用requests库获取网页数据。以下是获取微信公众号文章页面的示例: import requests url = ‘…

    python 2023年5月15日
    00
  • Python制作词云图代码实例

    下面是“Python制作词云图代码实例”的完整攻略: 1. 准备工作 安装Python环境及相关的库:jieba,wordcloud 准备好需要生成词云图的文本 2. 数据预处理 首先,需要对文本进行预处理,将其中的无用字符剔除,只留下有效的文本部分,例如: import jieba # 读取文本文件 with open(‘input.txt’, ‘r’, …

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