热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

先来先服务算法代码_程序员算法与数据结构基础中的基础,栈与递归

在此之前,我们介绍了动态规划、深度优先搜索等基础算法,但是,有部分好友评论说,难度太难了,我们知道动态规划的自

在此之前,我们介绍了动态规划、深度优先搜索等基础算法,但是,有部分好友评论说,难度太难了,我们知道动态规划的自顶向下跟深度优先搜索一般都用递归实现,今天我们就先来讲讲算法与数据结构中,基础中的基础递归。讲递归之前,我们先来了解下栈。

栈是一种基础的数据结构,每次操作的都是栈顶的数据。我们称栈顶的方向为上,栈底的方向为下,只有上面的元素已经出栈了,下面元素才能出栈,我们称之为先进后出。好比这个图中健身器材,这实际上就是一个栈,最小最上面的那块铁最后安装进去,却最先被取出来,最大的那个铁圈,最早安装进去,最晚取出来。(找了好久才找到一个现实生活中常见又大众的例子,作为一个程序员,生活真的是比较单调)

3bde8e5c92871c9f439558bbd5edba7b.png

栈是一种支持Push跟Pop两种数据结构,他的基本操作如下图所示,每次push操作,实际上都是往栈的上方插入一个元素,Pop操作,则是把栈最上方的元素弹出来。

49853c9ab88f025db6236c67d3fda7ba.png

那么这个栈跟我们要讲的递归到底是什么关系呢?我们先看一看这个问题,求一个数的阶乘,一个正整数的阶乘是1到它本身所有正整数的乘积,我们用递归的方式来实现这个功能。

80c2689f239554bd89919e18426683e7.png

这个代码在操作系统里面是怎么执行的呢,操作系统本身就有一个运行时候的栈。我们假设求5的阶乘,操作系统执行到第5行,发现这是一个递归,就会把它加到系统栈里面,并且记录下我在执行fact方法,x等于5,执行到第5行,然后开始计算4,执行到第5行,发现是个递归,又把他记录到系统栈里面,记录下,正在执行fact方法,x等于4,计算到第5行。。。直到执行到x等于1,然后退出,系统开始退栈,回到刚才X等于2的时候,从第5行开始执行,然后执行第6行,接着退出,执行x=3的时候。。。最后,到了栈底x=5,计算完之后栈没有元素了,整个方法执行完毕!

e6b36c2e0eda418014d3298295503004.png

我们常常说暴栈,也就是Stack Overflow,说的就是系统栈溢出,造成这种问题的一般原因都是因为递归没有退出条件!所以操作系统不停递归,类似与死循环。上述例子中,当x等于的时候就退出,就是退出条件。另外一种可能,是本身数据量就非常大,也有可能会造成Stack Overflow,这种一般的解决方法也有三种,一是增大系统栈空间,二是使用非递归的方法,三是减少递归过程中栈空间的使用。

好了,今天的算法我们就讲到这里,有什么疑问可以随时提出。有帮助到的朋友点赞加关注哦,我会持续更新。



推荐阅读
  • 自学编程与计算机专业背景者的差异分析
    本文探讨了自学编程者和计算机专业毕业生在技能、知识结构及职业发展上的不同之处,结合实际案例分析两者的优势与劣势。 ... [详细]
  • Codeforces Round #566 (Div. 2) A~F个人题解
    Dashboard-CodeforcesRound#566(Div.2)-CodeforcesA.FillingShapes题意:给你一个的表格,你 ... [详细]
  • 网易严选Java开发面试:MySQL索引深度解析
    本文详细记录了网易严选Java开发岗位的面试经验,特别针对MySQL索引相关的技术问题进行了深入探讨。通过本文,读者可以了解面试官常问的索引问题及其背后的原理。 ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • 本题探讨了在大数据结构背景下,如何通过整体二分和CDQ分治等高级算法优化处理复杂的时间序列问题。题目设定包括节点数量、查询次数和权重限制,并详细分析了解决方案中的关键步骤。 ... [详细]
  • 智能车间调度研究进展
    本文综述了基于强化学习的智能车间调度策略,探讨了车间调度问题在资源有限条件下的优化方法。通过数学规划、智能算法和强化学习等手段,解决了作业车间、流水车间和加工车间中的静态与动态调度挑战。重点讨论了不同场景下的求解方法及其应用前景。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 利用存储过程构建年度日历表的详细指南
    本文将介绍如何使用SQL存储过程创建一个完整的年度日历表。通过实例演示,帮助读者掌握存储过程的应用技巧,并提供详细的代码解析和执行步骤。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • 阅读本文大约需要3分钟。微信8.0版本的发布带来了许多令人振奋的新功能,如烟花特效和改进的悬浮窗,引发了用户的热烈反响。 ... [详细]
  • 深入解析:阿里实战 SpringCloud 微服务架构与应用
    本文将详细介绍 SpringCloud 在微服务架构中的应用,涵盖入门、实战和案例分析。通过丰富的代码示例和实际项目经验,帮助读者全面掌握 SpringCloud 的核心技术和最佳实践。 ... [详细]
  • 本文深入探讨了C++对象模型中的一些细节问题,特别是虚拟继承和析构函数的处理。通过具体代码示例和详细分析,揭示了书中某些观点的不足之处,并提供了更合理的解释。 ... [详细]
  • 堆是一种常见的数据结构,广泛应用于计算机科学领域。它通常表示为一棵完全二叉树,并可通过数组实现。堆的主要特性是每个节点的值与其父节点的值之间存在特定的关系,这使得堆在优先队列和排序算法中非常有用。 ... [详细]
  • 探索电路与系统的起源与发展
    本文回顾了电路与系统的发展历程,从电的早期发现到现代电子器件的应用。文章不仅涵盖了基础理论和关键发明,还探讨了这一学科对计算机、人工智能及物联网等领域的深远影响。 ... [详细]
  • 2018年3月31日,CSDN、火星财经联合中关村区块链产业联盟等机构举办的2018区块链技术及应用峰会(BTA)核心分会场圆满举行。多位业内顶尖专家深入探讨了区块链的核心技术原理及其在实际业务中的应用。 ... [详细]
author-avatar
手机用户2502859733
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有