当前位置: 首页 > news >正文

python之递归

文章目录

  • 前言
  • 一、递归是什么?
  • 二、递归用在哪些方面
  • 三、递归的思想
  • 总结


前言

结合网上的示例,自己总结一下递归。


一、递归是什么?

在讲解“递归”这个抽象概念之前,让我们来重温一下昔日往事。小时候,当我们在缠着长辈讲故事时,长辈们可能就用下面的故事来“忽悠”我们:

从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事!故事是什么呢?从前有座山,山里有座庙,庙里有个老和尚正在给小和尚讲故事!故事是什么呢……

除非讲故事的人自己停下来不讲了,不然这个故事可以“无限”讲下去,原因就是“故事”嵌套的“故事”就是“故事”本身,这就是语言上“递归”的例子。但是,由于这个故事并没有一个终止的条件,因此,它实际上是陷入了一种有头无尾的死循环,因此并不符合程序设计领域中定义的“递归”。

 那么在Python中递归就是一个函数内部可以自己调用自己(包括直接调用自己,间接调用自己)。

二、递归用在哪些方面

1、数学计算

在数学计算中,最常见的就是求阶乘。例如:5!=5*4*3*2*1

2、处理字符串

在字符串中常见的就是用于查找字符串

三、递归的思想

递归其实是一种逆向思维,就如同我要证明10>1,但是我现在证明不了,那我就证明2>1,这样就反向证明了10>1。

递归也会通过调用不断地把问题缩小,直到遇到一个简单的可以直接解决的基准情况。核心思想就是把一个大的问题,逐步的划成一个小范围,再从这个小范围里面,又继续划一个小范围。直到逼近最适合的答案。

举例:

1. 在列表中查找元素

假设我们要在一个列表中查找一个特定的元素,可以使用递归:

# 函数说明,lst是一个装有元素的列表,target是目标元素
def recursive_search(lst, target, index=0):
    # 基本情况:如果索引超出列表长度,则返回None
    if index == len(lst):
        return None
    # 检查当前元素是否为目标元素
    if lst[index] == target:
        return index
    # 递归调用,继续在列表的下一个元素中查找
    return recursive_search(lst, target, index + 1)


# 示例
lst = [1, 2, 3, 4, 5]
target = 3
print(recursive_search(lst, target))  # 输出: 2

2. 在二叉树中查找元素

在二叉树中查找一个元素,也可以使用递归:

# 示例二叉树结构
#       4
#      / \
#     2   6
#    / \
#   1   3

class TreeNode:
    def __init__(self, value=0, left=None, right=None):
        self.value = value
        self.left = left
        self.right = right


def search_in_bst(root, target):
    # 基本情况:如果树为空,返回None
    if root is None:
        return None
    # 检查当前节点值是否为目标值
    if root.value == target:
        return root
    # 如果目标值小于当前节点值,递归在左子树中查找
    elif target < root.value:
        return search_in_bst(root.left, target)
    # 如果目标值大于当前节点值,递归在右子树中查找
    else:
        return search_in_bst(root.right, target)


# 示例二叉树结构
#       4
#      / \
#     2   6
#    / \
#   1   3
root = TreeNode(4, left=TreeNode(2, left=TreeNode(1), right=TreeNode(3)),
                right=TreeNode(value=6, left=None, right=None))

print(search_in_bst(root, 4).value)  # 输出: 3

额外知识:

类的参数中的值,可以传入自己类的初始化参数。

引用文档:

https://zhuanlan.zhihu.com/p/158300209

百度安全验证

百度安全验证


总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

相关文章:

  • nnUNet V2修改网络——加入GHPA 模块
  • 【Qt】 Data Visualization
  • P8752 [蓝桥杯 2021 省 B2] 特殊年份——string提取索引转换为值
  • ARM系统源码编译OpenCV 4.10.0(包含opencv_contrib)
  • vue3和vue2的组件开发有什么区别
  • 3.10 企业级AI内容生成引擎:从策略到落地的全链路技术指南
  • 【大模型】Transformers基础组件 - Tokenizer
  • 2024年职高单招或高考计算机类投档线
  • Python基于Django的人脸识别上课考勤管理系统【附源码】
  • flink jobgraph详细介绍
  • Golang GORM系列:GORM并发与连接池
  • 未来游戏:当人工智能重构虚拟世界的底层逻辑
  • 【mysql】数据类型介绍-空间类型-空间索引
  • Docker换源加速(更换镜像源)详细教程(2025.2最新可用镜像,全网最详细)
  • 机械学习基础-10.从时间序列数据中学习-数据建模与机械智能课程自留
  • LabVIEW的吞雨测控系统
  • 探讨如何加快 C# 多层循环的速度效率
  • 软件测试:定义和实质
  • 观望=没有!
  • 利用websocket检测网络连接稳定性
  • 75万买299元路由器后续:重庆市纪委、财政局、教委联合调查
  • 检疫期缩减至30天!香港优化内地进口猫狗检疫安排
  • 外媒:初步结果显示,菲律宾前总统杜特尔特当选达沃市市长
  • 多家中小银行存款利率迈入“1时代”
  • 第1现场 | 印巴停火次日:当地民众逐渐恢复正常生活
  • 郑州通报“夜市摊贩收取香烟交给城管”:涉事人员停职调查