浅谈「递归」(草稿)

我学习递归是从 「归并排序」和「快速排序」开始的,尤其「归并排序」是学习「递归」和 「分治算法」的很好的学习材料。

  • 每一个递归,都有「自顶向下」和「自底回顶」的过程,也就是所有相关参数要全部先入栈,然后再出栈,这样的一个过程,才完成了一个任务。
    因此,它有「先进后出,后进先出」的过程。

下图是「归并排序」的理解过程。
在这里插入图片描述
图片来源:https://www.cnblogs.com/chengxiao/p/6194356.html

  • 自顶向下就是「拆解问题」,再从底部往上走,在这里就可以做一点事情,这是递归非常神奇,而且一开始琢磨不透的地方

可以从具体例子去想清楚,为什么递归方法能够帮助我们完成一件具体的任务,我觉得这个切入点是很好的,尤其是想清楚「归并排序」为什么可以完成排序任务。

还有就是「二叉树」和「链表」的问题 做多了,「递归」也就熟悉了哈。

总结:

  • 多写代码 「归并排序」「二叉树」「链表」问题,写好「递归」的时候,顺便把「分治思想」一起搞定;
  • 尽量在纸上画一下内存图,其实就是画一个栈,后进先出,好多人就是这么搞懂的。

我感觉后面应该精选一些例子。

参考资料:https://leetcode-cn.com/circle/article/koSrVI/

递归是计算机编程语言特有的一种思维方式和实现方式。

相信绝大多数朋友都被「递归」这个概念给折磨过。这一点其实也不奇怪,人脑是很不适合做递归这样的事情的。所以我们常常听到:「我的脑容量不够啦」这样的抱怨。

只要学习过一点点数据结构基础的朋友,相信对递归这件事情是怎么实现的,也有一定的了解。

相比大家都知道,在互联网领域,有一个网站特别出名,Stack Overflow。

那么是不是所有的递归都可以转换成为非递归呢?理论是可以的,但是我们不建议大家做这种尝试,我说这句话的意思是,这种转换在有一些情况下不是万能的,或者说转换很复杂,没有固定的转换的方式。

我们学习算法与数据结构是为了是的解决问题更加简单,我们不建议大家去研究一些特别复杂且意义不大的问题,我这样说是基于,递归函数的一个缺点,什么缺点呢?
递归调用需要占用空间,而空间现在的计算基本条件其实是不在乎的。

学好递归的建议

(递归不是只有汉诺塔)

  • 学习树和链表的问题,熟悉递归函数的编写
  • 数组的问题也可以用递归实现

递归、分治、深度优先遍历、回溯搜索

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值