递归简述

数组求和

如上图为求解一个int数组中所有元素的和,此处是可以用一重循环解决,只是为了更直观简单的说明什么是递归,所以才以此为例。

一个递归函数应包含最基本的两部分:

1.求解初最基本问题(递归终止条件)

      **即当问题被拆分为最小时,应该如何处理**

2.将原问题转化为更小的问题

书写递归函数时,不应该被函数的自我调用逻辑所迷惑,应该注重当前函数所需要解决的问题,自我调用只是解决问题的一个步骤(可以理解为只是调用了一个子过程,子过程结束后返回相应结果,然后主过程继续运行)

链表删除节点

上图为利用递归函数,解决leetcode中删除头结点为head的链表中值为val的节点,非常简洁!

下图为未使用递归函数的解(代码量上升,且逻辑复杂):


image.png

递归的代价

递归的代价

如上面列举的“数组求和”及“链表删除节点”,当数组元素足够多,或者链表节点足够多时,那么栈内存将会溢出~
并且递归调用函数实际也是会消耗更多的时间。

递归在处理线性问题时确实不具备优势,但是用递归处理树形结构数据时,将会是非常适合的,后续章节,我将记录利用递归思想处理树形数据结构

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,907评论 1 32
  • 算法思想贪心思想双指针排序快速选择堆排序桶排序荷兰国旗问题二分查找搜索BFSDFSBacktracking分治动态...
    第六象限阅读 10,227评论 0 0
  • 一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这...
    Winterfell_Z阅读 11,471评论 0 13
  • 我登山,不是因为山在那里,而是因为我在这里。
    悦读漫笔阅读 2,532评论 0 2
  • 2018年10月14是我(孙帅)的日精进行动第52天,和大家分享我今天的进步,我们互相勉励,携手前行。每天进步一点...
    微笑调调阅读 1,009评论 0 0

友情链接更多精彩内容