漫谈算法——递归

110 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第3天,点击查看活动详情

前言

在我们人类社会中,我们大家都有自己的朋友圈,有些人的朋友圈很大,有些人的朋友圈很小,当我们有需要朋友帮忙的时候,我们就会求助周边的朋友,假如周边的朋友听到帮忙后,但是自己帮不上时,就会请求他自己周边的朋友看是否能帮上忙,然后某个朋友的朋友能帮的上忙的时候,通过一层一层回归回来,这样子你就找到可以帮忙的人了,这样的一个过程可以映射成我们编程中的算法——递归。

算法递归

递归是一个非常广泛的算法,也是非常基础的算法,很多其他的数据结构和算法都是需要使用到递归,比如DFS深度优先搜索,二叉树遍历。那么我们的递归算法会适用什么类型的问题呢?首先一个问题的解可以分解成几个子问题的解,子问题就是数据规模比原问题更小的问题。并且子问题的求解思路和原问题的求解思路是一致的,但是问题可以拆解子问题的时候,问题肯定是不能不断的进行拆解的时候,就像你的朋友圈发散开后总有一个最后的朋友,也就是你朋友圈的终点。所以递归必须要存在终止条件,不能无限循环。所以总的来说,我们就是要推导出递归公式以及这个递归的终止条件。接下来就是根据这个公式去编写代码即可。但是递归存在一个问题就是,假如递归的深度太深时,会导致栈溢出,程序崩溃,解决这个问题有两种方式,一是使用“备忘录”的方式将重复的子问题的解进行记录。而是将递归的公式使用循环的代码来实现。

总结

递归是我们的常用算法之一,大家一定要好好掌握下来!