首页 > 其他分享 >递归 != 递龟

递归 != 递龟

时间:2024-11-10 14:45:04浏览次数:3  
标签:调用 递归 递龟 队伍 问题 算法 排序

不要被我们的标题误导了,递归不等于递只乌龟

今天终于来到了,闫哥认为的第一个“玄学”算法了。

递归这玩意,对于初学者而言,在基础的数据结构和算法中,我认为可以归纳到到“玄学”这一类了。

那么,大家就会问了“既然递归跟玄学一样,那为什么还要学它呢?”。那我可以先给你说一句“不学也是可以滴,咱们直接转行,不学编程了”。其实到后面。比如,深度优先搜索,八皇后,回溯等算法的学习都会涉及到递归算法。

所以,咱们今天就放句狠话,必须搞定递归,搞的明明白白的。

对于“玄学”算法,我们就不能用正常的思维去学习它。既然是玄学,那么我们就先采用玄学的思维去理解和分析一下递归。

为什么称它为玄学呢?不是有多难,而是有些人,一看就明白,一用就精髓。而有些人呢,比如我,一看就会,一学就废,一开始就感觉递归是黑洞,我可以递进去,但就是归不出来。

这里呢。我们先敲一下重点。

递归:必须有递有归那才叫递归

那么,接下来。我们先从一个故事去理解什么是递归吧。

在一个繁忙的大学食堂里,有一个长长的队伍,学生们都在耐心地等待着打饭。这个故事的主角是一个名叫小闫的学生,他刚刚加入队伍,但他有一个问题:他想知道自己在队伍中的确切位置。

小闫看着前面的人群,感到有些困惑。他想知道自己还要等多久才能打到饭,但他又不好意思直接问前面的人。突然,他灵机一动,决定用一种聪明的方法来解决这个问题。

小闫决定从队伍的最后一个人开始,也就是他前面的那个人,他称之为“前面的同学”。他问前面的同学:“你知道你在队伍中的位置吗?”前面的同学摇了摇头,但他说:“我可以问问我前面的同学。”

就这样,小闫的问题在队伍中传递开来。每个被问到的人都会问他们前面的同学,直到这个问题传到了队伍的最前面。

以下是就是一个简单的递归过程:

  • 第 19 个人问第 18 个人:“你知道你在队伍中的位置吗?”
  • 第 18 个人问第 17 个人:“你知道你在队伍中的位置吗?”
  • 这样一直问到第 2 个人,他问第 1 个人:“你知道你在队伍中的位置吗?”

队伍的第一个人,也就是即将打饭的人,他笑着回答:“我是第一个,所以我确定我在队伍中的位置是 1。”(这里的第一个人就是我们的递归结束条件)

现在,这个信息开始返回给小闫:

  • 第 2 个人告诉第 3 个人:“我是第二个,所以你是第三个。”
  • 第 3 个人告诉第 4 个人:“我是第三个,所以你是第四个。”
  • 这样一直传递,直到第 18 个人告诉第 19 个人:“我是第 18 个,所以你是第 19 个。”

最后,小闫前面的同学转过头告诉他:“我是第 18 个,所以你是第 19 个。” 小闫终于知道了他在队伍中的位置,他感到非常高兴。

小闫安心地等待着,最终轮到他打到饭。他一边吃着美味的饭菜,一边想着:“递归真是个神奇的东西,它帮助我解决了问题,而且还让队伍中的每个人都参与进来。”

(由此看来,小闫的道德素质真的没话说,从来不插队,而且还能让你学会递归。)

这个故事展示了递归的概念,其实就像一个链式反应,每个人都在解决问题的一部分,直到最终得到完整的答案。

上面的

标签:调用,递归,递龟,队伍,问题,算法,排序
From: https://blog.csdn.net/weixin_55818116/article/details/143588454

相关文章

  • 小D的abc变换问题-动态规划或者递归
    问题描述小D拿到了一个仅由 "abc" 三种字母组成的字符串。她每次操作会对所有字符同时进行以下变换:将 'a' 变成 'bc'将 'b' 变成 'ca'将 'c' 变成 'ab'小D将重复该操作 k 次。你的任务是输出经过 k 次变换后,得到的最终字符串。例如:对于初始字符串 "abc",执......
  • 过河卒,代码实现(递归算法)
    题目【输入形式】      输入一行4个整数,分别表示B点的坐标(n,m)以及对方马的坐标(X,Y)【输出形式】      输出一个整数,表示路径的条数【样例输入】6632【样例输出】171.思路类似经典的爬楼梯问题(n级台阶,每次能走一个台阶或者两个台阶,求走到n的不同顺序......
  • 将给定的表达式树(二叉链表存储)转换为等价的中缀表达式(递归)
    3765.表达式树可以拿这题验证自己的代码对不对ps:这里不是这题的答案,参照代码思路写即可voidBtreeToe(Btree*root){ BtreeToExp(root,1);//根的高度为1 }voidBtreeToExp(Btree*root,intdep){ if(root==NULL)return;//如果是空结点返回 elseif(!root->lef......
  • C++ 可变参数模板递归展开
    #include<iostream>usingnamespacestd;template<typenameHead,typename...Tail>doubleMax(Headfirst,Tail...rest){doubleMaxnum=0;Maxnum=Max(rest...);if(Maxnum<first)Maxnum=first;returnMaxnum;}......
  • 用C语言实现汉诺塔问题(第四天:函数递归)【每天进步一点点-小白学习笔记】
    0 前言        最近比较忙,到现在才有时间更新博客,这两天刚好学到了函数递归,这是个很有趣的知识,为什么说有趣呢?因为递归这个东西吧,很多人都对它又爱又恨。爱在递归不仅可以轻松简化代码,增加可读性,还能将一些很难解决的算法问题轻松解决,但它又大大加大了程序复杂度,既......
  • 【老生谈算法】matlab实现可变指数遗忘的扩展递归最小二乘法(VEX-RLS)——递归最小二乘
    MATLAB实现可变指数遗忘的扩展递归最小二乘法(VEX-RLS)1、文档下载:本算法完整讲解和全套实现源码见下资源,有需要的朋友可以点击进行下载说明文档(点击下载)本算法文档【老生谈算法】Matlab实现可变指数遗忘的扩展递归最小二乘法(VEX-RLS)及其应用更多matlab算法原理及源码详......
  • 二叉树的递归遍历和迭代遍历
    递归每次写递归,都按照这三要素来写,可以保证大家写出正确的递归算法!确定递归函数的参数和返回值:确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数,并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。确定终止条件:写完了递归算法,运行的时......
  • 递归经典例题
    7-8Hanoi塔问题分数20作者黄龙军单位绍兴文理学院Hanoi(汉诺)塔问题是一个经典的递归问题。设有A、B、C三个塔座;开始时,在塔座A上有若干个圆盘,这些圆盘自下而上,由大到小地叠在一起。要求将塔座A上的圆盘移到塔座C上,并仍按同样顺序叠放。在移动过程中要求遵守如下规则:每次只......
  • SQL实战训练之,力扣:2020. 无流量的帐户数(递归)
    目录        一、力扣原题链接        二、题目描述        三、建表语句        四、题目分析                五、SQL解答        六、最终答案        七、验证        八、知识点一、......
  • 编程之路,从0开始:函数与递归
            Hello大家好!很高兴我们又见面了!        给生活添点passion,开始今天的编程之路!目录1、函数定义及调用2、函数声明3、函数的嵌套调用和链式访问4、递归1、函数定义及调用        什么是函数呢?        函数就是一个固定的一......