一文带你解开“递归算法”的奥秘

简介: 云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 学习一个新的东西,肯定需要先大概了解一下它是什么?然后我们还有知道学习它有什么用?其次我们要知道它的优缺点,这样有助于我们更好的选择何时使用它。

云栖号资讯:【点击查看更多行业资讯
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!


学习一个新的东西,肯定需要先大概了解一下它是什么?然后我们还有知道学习它有什么用?其次我们要知道它的优缺点,这样有助于我们更好的选择何时使用它。下面就让我们带着这三点开始今天的文章。

概述

什么是递归

简单来说递归就是方法自己调用自己,每次调用时传入不同的变量。一直到程序执行到指定的出口时停止调用本身,并将结果层层返回。

递归的作用和优点

递归的核心思想就是将一个大问题,拆解成一个小问题,然后将小问题再次拆解,层层拆分从而简化问题。这种设计理念可以简化重复的代码让程序变得更加简洁。

递归的缺点

使用递归算法时每次方法的调用都需要在栈中开辟出一个空间保存相关数据,频繁的压栈、弹栈会导致效率变低。

递归使用注意事项

1、使用递归算法解决问题必须要有出口,不然就形成死循环了。好好的递归变成了“死归”!

2、递归的调用次数不宜过多不然会造成栈溢出。

总结

能通过循环解决的问题尽量不要使用递归,循环要比递归的效率高很多。再者我们需要知道任何技术都会有它的利弊,当我们享受其优点的时候也要考虑其不足之处,从而使我们的程序更加优秀。

代码演示

通过上面的介绍想必大家已经对递归有了一个初步的认知。下面让我们通过一个小例子来加深对递归的理解。

问题:求n的阶乘是多少?

阶乘的含义:一个正整数的阶乘是所有小于以及等于该数的正整数的积。(简单介绍一下预防有不太清楚其含义的)

代码实现:

1

为了让大家看得更加清晰,下面让我们通过一张图来了解一下,以上代码是如何在内存中执行的。

2

通过以上的图文介绍,想必大家对递归算法已经有了一个深刻的认识。那么我们学习它有什么用呢?

常见用途

1、通过递归实现斐波那契数列,也就是经常听说的“兔子繁殖”问题。
2、通过递归实现经典的“汉诺塔”和“八皇后”游戏。
3、通过递归实现二叉树的遍历。
4、通过递归删除指定目录下的所有文件,包括文件和文件夹下的文件。

以上就是我总结的一些递归算法常见的应用场景。

【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/live

立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK

原文发布时间:2020-05-18
本文作者:_一只小菜鸟
本文来自:“掘金”,了解相关信息可以关注“掘金”

相关文章
|
6月前
|
存储 JavaScript 前端开发
递归的递归之书:第十章到第十四章
递归的递归之书:第十章到第十四章
52 0
|
6月前
|
算法 JavaScript 前端开发
递归的递归之书:第五章到第九章
递归的递归之书:第五章到第九章
150 0
|
4月前
|
算法 开发者 Python
惊呆了!Python算法设计与分析,分治法、贪心、动态规划...这些你都会了吗?不会?那还不快来学!
【7月更文挑战第10天】探索编程巅峰,算法至关重要。Python以其易读性成为学习算法的首选。分治法,如归并排序,将大问题拆解;贪心算法,如找零问题,每步求局部最优;动态规划,如斐波那契数列,利用子问题解。通过示例代码,理解并掌握这些算法,提升编程技能,面对挑战更加从容。动手实践,体验算法的神奇力量吧!
72 8
|
6月前
|
存储 算法 JavaScript
递归的递归之书:引言到第四章
递归的递归之书:引言到第四章
187 0
|
4月前
|
存储 算法 程序员
C语言编程—递归
递归是函数自我调用的编程技术,常用于解决分治问题,如计算阶乘和斐波那契数列。示例中展示了C语言的阶乘和斐波那契数列递归实现。递归需满足:问题可转化为规模更小的同类问题,存在结束条件以防止无限循环,并可能消耗大量时间和栈空间。栈用于存储函数调用信息,过多递归可能导致栈溢出。递归虽简洁,但非最优效率选择,递推算法通常是更好的替代方案。
|
6月前
|
存储 缓存 算法
程序设计中的递归思想与实践
程序设计中的递归思想与实践
43 0
轻轻松松学递归
轻轻松松学递归
|
算法 Windows
C 递归 详解(通俗易懂)
C 数据结构与算法入门——递归 内容分享。
80 0
|
算法 Java
“二分”带来“十分”快感——二分思想的奥秘解析
二分查找是一种非常简单易懂的快速查找算法,生活中到处可见。比如说,我们现在来做一个猜字游戏。我随机写一个0到99之间的数字,然后你来猜我写的是什么。猜的过程中,你每猜一次,我就会告诉你猜的大了还是小了,直到猜中为止。你来想想,如何快速猜中我写的数字呢?
178 0
|
机器学习/深度学习 算法 搜索推荐
<<算法很美>>——(二)详解递归思想
<<算法很美>>——(二)详解递归思想
<<算法很美>>——(二)详解递归思想