首页 > 编程语言 >(递归)算法

(递归)算法

时间:2024-10-15 10:18:45浏览次数:11  
标签:遍历 递归 复杂度 问题 算法 条件 排序

递归条件:

1.终止条件,当满足这个条件时,递归将停止并返回一个值,这个条件是为了防止函数无限递归,导致栈溢出。

2.递归条件,这个是函数调用自身的地方,通常是通过将问题分解为更小的子问题来解决。

例如求n的阶乘:

def factorial(n):
    # 基线条件
    if n == 0:
        return 1
    # 递归条件
    else:
        return n * factorial(n - 1)

当我们做题时,面对递归问题,应当分析递归,这时需用到递归树

原式中为2T(n/2),所以分为俩节点

计算树每层的复杂度,将所有层的复杂度相加得到最终的复杂度。

适合使用递归的题目类型

  1. 自然递归结构的问题

    • 分治法:可以将问题分解为多个相同或相似的子问题,例如归并排序、快速排序。
    • 树和图的遍历:如二叉树的前序、中序、后序遍历,图的深度优先搜索(DFS)。
    • 排列组合:生成排列、组合、子集等问题。
  2. 递归定义清晰的问题

    • 数学递归问题:如阶乘计算、斐波那契数列。
    • 字符串处理:如回文检测、字符串匹配。
  3. 递归生成特性的问题

    • 分形图形:如Sierpinski三角形、Koch雪花。
    • 动态规划:某些动态规划问题可以通过递归+记忆化的方式解决。

不适合使用递归的题目类型

  1. 性能敏感问题

    • 深度递归:递归深度较大的情况下,可能会导致栈溢出问题。
    • 重复计算:如斐波那契数列的纯递归实现会多次计算相同的子问题,效率较低。对于这种情况,可以使用动态规划或记忆化递归来优化。
  2. 迭代更适合的问题

    • 线性遍历:如数组的遍历、链表操作。
    • 循环结构清晰的问题:如查找、排序(除了归并和快速排序)。
  3. 状态管理复杂的问题

    • 状态机:某些需要维护复杂状态的问题,迭代方法可能更易于实现和管理。

标签:遍历,递归,复杂度,问题,算法,条件,排序
From: https://blog.csdn.net/2301_81188158/article/details/142925280

相关文章

  • 【机器学习(五)】分类和回归任务-AdaBoost算法-Sentosa_DSML社区版
    @目录一、算法概念一、算法原理(一)分类算法基本思路1、训练集和权重初始化2、弱分类器的加权误差3、弱分类器的权重4、Adaboost分类损失函数5、样本权重更新6、AdaBoost的强分类器(二)回归算法基本思路1、最大误差的计算2、相对误差计算3、误差损失调整4、权重系数计算5、更新样本......
  • 【机器学习(七)】分类和回归任务-K-近邻 (KNN)算法-Sentosa_DSML社区版
    @目录一、算法概念二、算法原理(一)K值选择(二)距离度量1、欧式距离2、曼哈顿距离3、闵可夫斯基距离(三)决策规则1、分类决策规则2、回归决策规则三、算法优缺点优点缺点四、KNN分类任务实现对比(一)数据加载和样本分区1、Python代码2、Sentosa_DSML社区版(二)训练模型1、Python代码2、Sento......
  • 【机器学习(六)】分类和回归任务-LightGBM算法-Sentosa_DSML社区版
    @目录一、算法概念二、算法原理(一)Histogram(二)GOSS1、信息增益2、近似误差(三)EFB三、算法优缺点(一)优点(二)缺点四、LightGBM分类任务实现对比(一)数据加载和样本分区1、Python代码2、Sentosa_DSML社区版(二)模型训练1、Python代码2、Sentosa_DSML社区版(三)模型评估和模型可视化1、Python代......
  • 【机器学习(十一)】糖尿病数据集分类预测案例分析—XGBoost分类算法—Sentosa_DSML社
    @目录一、XGBoost算法二、Python代码和Sentosa_DSML社区版算法实现对比(一)数据读入和统计分析(二)数据预处理(三)模型训练与评估(四)模型可视化三、总结一、XGBoost算法  关于集成学习中的XGBoost算法原理,已经进行了介绍与总结,相关内容可参考【机器学习(一)】分类和回归任务......
  • 【机器学习(十二)】机器学习回归案例之二手汽车价格预测—XGBoost回归算法—Sentosa_D
    @目录一、算法和背景介绍二、Python代码和Sentosa_DSML社区版算法实现对比(一)数据读入与统计分析(二)数据处理(三)特征选择与相关性分析(四)样本分区与模型训练(五)模型评估和模型可视化三、总结一、算法和背景介绍  关于XGBoost的算法原理,已经进行了介绍与总结,相关内容......
  • 计算机视觉与机器学习 | 目标检测 - 主流算法介绍 - 从RCNN到DETR(建议收藏 !)
    本文来源公众号“计算机视觉与机器学习”,仅用于学术分享,侵权删,干货满满。原文链接:目标检测-主流算法介绍-从RCNN到DETR1前言目标检测是计算机视觉的一个非常重要的核心方向,它的主要任务是目标定位和目标分类。让我们跟随文章的介绍一起来回顾一下这些年目标检测的发展......
  • Java常见排序算法-插入排序
    一、算法介绍 插入排序是一种简单且常用的排序算法,它的实现思路是将列表分为已排序和未排序两部分,每次从未排序部分取出一个元素,将它插入到已排序部分的适当位置,最终将列表排序完成。即将未排序的数值直接插入有序的一组数中,使得插入后的这组数还是有序的。二、算法示意图......
  • 基于人工智能的图像分类算法研究与实现 - 深度学习卷积神经网络图像分类
    毕业设计-基于人工智能的图像分类算法研究与实现-深度学习卷积神经网络图像分类文章目录0简介深度学习作为机器学习领域内新兴并且蓬勃发展的一门学科,它不仅改变着传统的机器学习方法,也影响着我们对人类感知的理解,已经在图像识别和语音识别等领域取得广泛的应用......
  • DeepSORT算法实现车辆和行人跟踪计数和是否道路违规检测(代码+教程)
    DeepSORT算法实现车辆和行人跟踪计数和是否道路违规检测(代码+教程)特征提取此处面对的场景是是交通摄像头下的马路场景,数据格式为视频流或者视频,所以我们要提取视频的第一帧作为背景来进行车道线的标定,运行extra.py文件即可提取第一帧背景图片。✍......
  • 代码随想录算法训练营day15| 110.平衡二叉树 257.二叉树的所有路径 404.左叶子之和
    学习资料:https://programmercarl.com/0110.平衡二叉树.html#算法公开课平衡二叉树:任意一个节点的左右子树高度差不超过1左叶子:是叶子节点,且是其父节点的左节点完全二叉树:上层均满,底层的节点从左到右连续满二叉树:每层都是满的,节点总数为(2^k+1)语法:2<<1是2^2学习记录:1......