首页 > 其他分享 >递归(Recursion)简介

递归(Recursion)简介

时间:2024-06-24 10:10:09浏览次数:21  
标签:node return 递归 Recursion 情形 算法 简介 def

递归(Recursion)在计算机科学中是一个基本概念,它描述了一种解决问题的方法,即一个问题通过调用自身来解决自身的一部分。递归不仅在编程中频繁出现,在数学、算法设计中也有广泛应用。

递归的基本概念

递归需要两个基本要素:

  1. 基准情形(Base Case):当问题规模足够小时,直接给出答案,不再进一步递归。
  2. 递归情形(Recursive Case):将问题分解为更小的子问题,并通过调用自身来解决这些子问题。

递归示例:阶乘

计算一个整数n的阶乘(n!)是递归的经典例子。

  • 基准情形:当n等于1时,n! = 1。
  • 递归情形:n! = n * (n-1)!

递归实现的Python代码如下:

def factorial(n):
    if n == 1:  # 基准情形
        return 1
    else:
        return n * factorial(n-1)  # 递归情形

递归示例:斐波那契数列

斐波那契数列也是递归的典型应用:

  • 基准情形:当n等于0或1时,斐波那契数列值分别为0和1。
  • 递归情形:斐波那契数列的第n项等于第(n-1)项与第(n-2)项之和。

递归实现的Python代码如下:

def fibonacci(n):
    if n == 0:  # 基准情形
        return 0
    elif n == 1:
        return 1
    else:
        return fibonacci(n-1) + fibonacci(n-2)  # 递归情形

递归在数据结构中的应用

递归在众多数据结构与算法中有重要应用:

  1. 二叉树遍历:前序遍历、中序遍历、后序遍历均可使用递归实现。

    class TreeNode:
        def __init__(self, value):
            self.value = value
            self.left = None
            self.right = None
    
    def inorder_traversal(root):
        if root:  # 递归情形
            inorder_traversal(root.left)
            print(root.value)
            inorder_traversal(root.right)
    
  2. 图的深度优先搜索(DFS):用于遍历或搜索图中的顶点。

    def dfs(graph, node, visited):
        if node not in visited:
            print(node)
            visited.add(node)
            for neighbor in graph[node]:
                dfs(graph, neighbor, visited)
    
  3. 排序算法:如快速排序和归并排序,均利用递归思想来实现。

    def quicksort(array):
        if len(array) < 2:  # 基准情形
            return array
        else:
            pivot = array[0]
            less = [i for i in array[1:] if i <= pivot]
            greater = [i for i in array[1:] if i > pivot]
            return quicksort(less) + [pivot] + quicksort(greater)  # 递归情形
    

递归的重要性与问题

优点

  • 代码简洁,容易理解许多复杂算法。
  • 直观地解决分治问题,如很多经典的算法问题可以通过递归分解成子问题来解决。

缺点

  • 递归可能导致高昂的栈空间使用,特别是深度递归(如计算大数阶乘)。
  • 有些问题递归解决方案效率不高,需要优化(如使用尾递归优化或改用动态规划)。

总结

递归是一种强大的问题解决方式,适用于许多算法与数据结构。理解递归的概念,并能够有效地分析和编写递归算法,是计算机科学学习中的重要部分。若需进一步了解,可以参考相关教材和文献。

标签:node,return,递归,Recursion,情形,算法,简介,def
From: https://www.cnblogs.com/liuyajun2022/p/18264460

相关文章

  • 「树莓派入门」树莓派简介
    树莓派入门篇-树莓派简介引言树莓派,这个名字听起来是不是有点可爱又神秘?其实,它是一种功能强大的小型计算机,尺寸小巧,却能完成许多让人惊叹的任务。在本教程中,我们将一起探索树莓派的世界,了解它的背景、功能以及如何入门学习。一、树莓派的基本背景和功能1.什么是树莓......
  • [本科项目实训] HuggingFace简介与Git lfs模型下载
    HuggingFace[1]HuggingFace是一个人工智能领域尤其是自然语言处理领域的开源平台,包含数据集、模型、文档、解决方案等内容的分享。由于LLM的参数量较大,往往将参数文件托管到该平台并使用transformers[3]库进行模型调用。模型下载由于项目要求模型本地运行,因而需要下载模......
  • VLC简介
    VLC的全名是VideoLanClient,是一个开源的、跨平台的视频播放器。VLC支持大量的音视频传输、封装和编码格式,完整的功能特性列表可以在这里获得http://www.videolan.org/vlc/features.html,下面给出一个简要的不完整的列表:操作系统:Windows、WinCE、Linux、MacOSX、BEOS、BSD......
  • 【vueUse库Sensors模块各函数简介及使用方法---下篇】
    vueUse库是一个专门为Vue打造的工具库,提供了丰富的功能,包括监听页面元素的各种行为以及调用浏览器提供的各种能力等。其中的Browser模块包含了一些实用的函数,以下是这些函数的简介和使用方法:vueUse库Sensors模块各函数简介及使用方法vueUseSensors函数1.usePag......
  • HarmonyOS简介
    随着万物互联时代的开启,应用的设备底座将从几十亿手机扩展到数百亿IoT设备。全新的全场景设备体验,正深入改变消费者的使用习惯。同时应用开发者也面临设备底座从手机单设备到全场景多设备的转变,通过全场景多设备作为全新的底座,为消费者带来万物互联时代更为高效、便捷的体验。......
  • 代码随想录算法训练营第十四天 | 226.翻转二叉树 101.对称二叉树 104.二叉树的最大深
    226.翻转二叉树题目:给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。解题:思路:遍历的过程中交换每个节点的左右孩子。选择哪种遍历方式?中序不行,左中右,左边子节点交换完,处理中间交换了左节点和右节点,再处理右节点去交换时这个右节点就是原来的左节点,所以有一边就一......
  • 机器学习(一)——递归特征消除法实现SVM(matlab)
    机器学习方法对多维特征数据进行分类:本文用到非常经典的机器学习方法,使用递归特征消除进行特征选择,使用支持向量机构建分类模型,使用留一交叉验证的方法来评判模型的性能。构建模型:支持向量机(SupportVectorMachine,SVM);特征选择:递归特征消除(RecursiveFeatureElimination,RFE);......
  • ChatGPT的原理简介
    ChatGPT的原理简介目录ChatGPT简介自然语言处理基础词嵌入序列模型注意力机制生成式预训练模型Transformer架构GPT模型ChatGPT的工作原理预训练微调生成回复应用和局限应用场景局限和挑战未来发展方向总结ChatGPT简介ChatGPT是OpenAI开发的一种生成式预训练模型......
  • python 趣味习题_递归函数(炸弹迷宫的走法)
    @[toc]python学习中,常会遇到一些百思不得其解的难题,但有时“灵光一现”找准方法,难题便会迎刃而解。本专栏旨在记录本人解决问题的思考方法,及实现过程。有更好方法或对程序执行有疑问的伙伴,可在评论区留言,共同讨论。题目要求题目描述:在一串连续的迷宫(房间编号为1-11的......
  • 数学建模系列(1/4):数学建模简介
    引言数学建模是将现实中的问题转化为数学语言,通过构建数学模型加以解决的一门强大工具。其应用广泛,涵盖了从工程、金融到生物学等多个领域。本文将详细讲解数学建模的基本概念、历史背景、应用领域、数学建模的步骤,以及一个实际案例。1.什么是数学建模1.1定义与概念......