算法提升 (四) 递归
创始人
2024-04-02 18:31:34

作者:@小萌新
专栏:@算法提升
作者简介:大二学生 希望能和大家一起进步!
内容简介:本文会简单的介绍递归
在这里插入图片描述
严于律己 宽以待人

算法提升 (四) 递归

  • 什么是递归呢?
    • 求一个数组中的最大值
    • 递归的底层原理
    • Master公式
      • a
      • b
      • d
      • Master公式记忆方法
  • 总结

什么是递归呢?

递归(英语:Recursion),又译为递回,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。递归一词还较常用于描述以自相似方法重复事物的过程。例如,当两面镜子相互之间近似平行时,镜中嵌套的图像是以无限递归的形式出现的。也可以理解为自我复制的过程。

递归就是自身调用自身!

下面我会以一个简单的例子来切入 较为详细的解释下递归的过程

求一个数组中的最大值

当然最简单的思路 我们遍历一遍整个数组

找出它的最大值 这样子当然可以

但是为了让大家更好的理解递归 我们这里使用递归调用的方法来做一下

这里代码表示如下

我们来一行行的解读

int Get_Max(int *arr , int left , int right)
{// 首先是极限值if (left>=right){return arr[left];}// 如果没到极限值 那么找左右两边的最大值 比较一下返回大的就好int mid = left + (right - left) / 2;int leftmax = Get_Max(arr, left, mid);int rightmax = Get_Max(arr, mid + 1, right);if (leftmax>rightmax){return leftmax;}else{return rightmax;}}

首先递归我们第一个考虑的肯定是极限值对吧

假如我们到了极限了 数组的左右相等找最大值 那么我们肯定返回随便哪个都可以啊

if (left>=right){return arr[left];}

假如我们没有到极限值

那么我们就开始找它的左半边的最大值和右半边的最大值

代码表示如下

    // 如果没到极限值 那么找左右两边的最大值 比较一下返回大的就好int mid = left + (right - left) / 2;int leftmax = Get_Max(arr, left, mid);int rightmax = Get_Max(arr, mid + 1, right);

那么最后我们要求的是最大值是吧

这个时候只需要返回左边和右边当中的最大值 是不是就可以了啊

代码表示如下

if (leftmax>rightmax){return leftmax;}else{return rightmax;}

这之后就能得到我们的最大值啦

来看看结果符合不符合预期

在这里插入图片描述

再之后我们改变下最大值试试看

在这里插入图片描述

这里还是可以找到最大值的

递归的底层原理

很多人认为递归很神奇是吧 像魔法一样 明明我们没有写中间的函数过程 它却把最后的过程给我们算出

来了

其实递归并不是魔法

而是运用了一个叫做系统栈的东西

我们再上篇博客中已经学习栈这个数据结构

系统栈跟我们的栈结构类似

还是以我们上面那个函数为例

在栈上的调用过程如下图

在这里插入图片描述

大概结构就是这样子的

那么 我们这里给出一个判断题

所有的递归函数都能写成非递归形式

这句话对吗?

显然是正确的

因为我们学了栈这个数据结构 没有系统栈大不了我们来手动压栈

Master公式

在这里插入图片描述

那么 这里的a b c分别是什么意思呢?

a

a就是在这个递归函数从上到下走一遍(不进入函数内部) 主函数被调用多少次

在这里插入图片描述
比如说这里面

实际上一躺下来就调用了两次主函数

所以说这里的a = 2

b

那么b又是什么意思呢?

我们这里可以简单理解为

函数内部的主函数调用将函数分成了几部分?

如果说分成了两部分 这个b就是2

如果说分成了三部分 这个b就是3

d

d就很简单了

我们将所有的函数都注释掉 像这样子

在这里插入图片描述
然后再看看里面的时间复杂度是多少

很显然 是常数次 所以是O(1)

那么这个时候我们的d就是0

Master公式记忆方法

首先我们要记住要比较的两个数

Log aB 以及 d

如果d大 那么d就是N的指数

如果前面大 那么前面一项就是N的指数

如果相等 那么N的指数还是d 不过后面还要乘一个LogN

(最后这个比较特殊 要花一点时间记一下)

总结

在这里插入图片描述

本篇博客较为简单的介绍了递归的底层原理和Master公式
由于博主的水平有限所以难免博客中会出现纰漏 希望大佬们看到之后可以即使指正
最后如果这篇博客帮助到了你 别忘了一键三连啊
阿尼亚 哇酷哇酷!

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...