首页 > 其他分享 >重学递归思想,体悟数据结构奥妙

重学递归思想,体悟数据结构奥妙

时间:2023-10-28 20:14:55浏览次数:35  
标签:调用 体悟 递归 打印 内层 数据结构 就是 before

     说来好笑,暑假一腔热血想进acm,在学插入排序,归并排序这两个玩意,耗费了我整整一个星期都没搞懂,一度让我想放弃,觉得自己刚开始学算法就被打败了,不配coding了,后面请教别人,才发现里面有个递归思想我还不会,所以很痛苦。。。暑假结束了,递归我还没那么懂,今天来复仇了    

    先说说递归,本质上就是一个函数自己调用自己,为什么要自己调用自己,当然就是,你一直调用一个方法,肯定就是为了实现相同的一个目的,那你有事没事一直实现相同的目的干什么呢,谁去实现那个目的呢,为什么要去实现呢,这就是递归的精髓所在,递归存在的目的,就是为了用相同的方法,去往下一直处理相似的事物,这么说很抽象,比如说,我想遍历一个链表,那么我可以打印完a,接着再去打印a.next,可以把它叫做b,打印完b,再去打印b.next,接着就是c,d,e,f.....这就是相似的事物,比如说二分查找,我把一本500页的学生手册撕成250页,再把它的one half撕成 125页,接着再按照规律一直撕一直撕。。。。最后撕完了,这个可以叫做递归自己的子集,把事情化简 

      

 

 

看看这个玩意,sout里面一个after,一个before,before那边,会正向遍历链条,after那边反之,为什么呢,这就是递归的魅力了,先说说简单的before,很好理解,就是自己调用自己,先打印完自己,再调用下一个接着打印,直到结束,而after那一块,就是困扰我很久很久的点。。。,如下图

 

 

 

这就是一个递归中重要的2内层函数与外层函数的思想,就是你内层运行完了,你外层才能接着往下走,如图所示,打印完after3,内层3运行结束,内层2接着往下走打印after2,内层2运行结束,内层1.。。

 

标签:调用,体悟,递归,打印,内层,数据结构,就是,before
From: https://www.cnblogs.com/cjtaaa/p/17794522.html

相关文章

  • Python数据结构——链表
    链表(LinkedList)是一种基本的数据结构,用于组织和管理数据。它是由一系列节点(Node)组成的数据结构,每个节点包含一个数据元素和指向下一个节点的引用。链表是一种非线性数据结构,与数组不同,它可以根据需要动态分配内存。什么是链表?链表是由节点组成的数据结构,每个节点包含两部分:数据元......
  • 数据结构与算法(LeetCode) 第二节 链表结构、栈、队列、递归行为、哈希表和有序表
    一、链表结构1.单向链表节点结构publicclassNode{ publicintvalue;publicNodenext;publicNode(intdata){value=data;}}2.双向链表节点结构publicclassDoubleNode{publicintvalue;publicDoubleNodelast;publicDouble......
  • 数据结构与算法(LeetCode)第一节:认识复杂度,对数器,二分法与异或运算
    一、认识复杂度1.评估算法优劣的核心指标:时间复杂度:当完成了表达式的建立,只要把最高阶项留下即可。低阶项都去掉,高阶项的系数也去掉,记为O(去掉系数的高阶项);​ 时间复杂度是衡量算法流程的复杂度的一种指标,该指标只与数据量有关,与过程之外的优化无关常见的时间复杂度(从好到坏)O......
  • [考研] 数据结构
    针对数据结构的部分学习笔记。栈出栈排列个数:\(C_{2n}^n\),卡特兰数栈模拟中缀转后缀原理:中缀转后缀的原理是单调栈(维护一个优先级递增的栈),从栈底到栈顶的优先级必然递增,输出时可以保证优先级高的先输出(出栈)。中缀表达式和后缀表达式的不同仅在于符号位置不同,数字之间相......
  • 评论功能的选择难题:数据结构如何选定?
    尊敬的小伙伴们,大家好!我是小米,一个热爱技术、热衷分享的90后程序员。今天,我要和大家一起探讨一个在软件开发中常见,却又充满深度的话题——"面试题:评论功能采用什么数据结构?"。在这个数字化时代,几乎每个应用程序都需要实现评论功能。无论是社交媒体、电子商务网站还是新闻阅读应用,评......
  • 西北电专大二电院_数据结构上机报告记录_第二次上机报告
    第二次上机报告只要求提交了顺序串和顺序栈的基本操作的实现,这里把剩下两个也补充上去 顺序栈——进制转换1.问题描述本程序基于栈功能实现一个进制转换程序。(用顺序栈完成此题)InitStack()函数用于构造一个空栈;StackEmpty()函数用于判断栈是不是空栈;Push()函数实现将......
  • 数据结构与算法 → 深入数据结构
    前置知识前端数据及结构-链表-单向链表......
  • 西北电专大二电院_数据结构上机报告记录_第一次上机报告
    数据结构是最近纳入电院的必修主课,但是其期末考核是笔试形式(,日常有上机安排。这门课还是需要一定的课后上机练习和调试来增加对其的认识程度、发现自己欠缺的知识、可能犯下的错误,包括但不限于语法等这里主要收录几次上机安排的报告和自己的答案,作为记录 第一次上机问题一:顺......
  • 递归查询
    有时候表结构是层级关系的父子结构,要查出所有有的子,可用如下的sql,递归查询,以mysql为例:1、查出父下所有子WITHRECURSIVEproducttypeAS(SELECT'03f9096d-bd5d-11ed-a58a-7af8c5058daf'FinanClass,id,protypeid,typename,typelevelFROMt_base_commontypeWHEREid='0......
  • linux解压缩,复制,重命名,删除,目录按更新时间排序,grep递归搜索文档
    linux解压缩,复制,重命名,删除,目录按更新时间排序,grep递归搜索文档1.解压缩压缩命令zip-p-rmymail-1026.zipmymail/解压命令unzipmymail-1026.zip2.复制将文件file1复制到dir1目录下的file2文件cpfile1dir1/file2将文件夹source_dir复制到target_dir目前并且修改......