五 链表与递归1 递归

链表与递归

提起链表还有一个非常重要的话题: 递归
递归的话题总是和树连接在一起的,在树结构中使用递归是方便的

但链表这种结构也适合使用递归
因为链表具有天然的递归性质。但由于链表结构比较简单,我们用循环的方式也可以解决,所以在链表上使用递归比较少,但练习链表递归有助于我们理解递归和树

本章将不使用自己实现底层的单链表类,而是使用leetcode上的链表类
leetcode上链表相关提米是直接以链表为中心的,而不会包装链表类

什么是递归:

什么是递归:本质上,将原来的问题,转化为更小的同一问题。问题规模小到一定规模,就可以解决出来了。。

写递归算法的基本元素:

所有递归算法可以分成两部分:
1、求解最基本问题(这个不能自动求解,需要程序员编写逻辑的)
2、递归算法核心问题,把原问题转化成更小问题的过程!!!

转化成更小问题,不是仅仅求更小问题的答案,而是要根据最小问题的答案,构建出原问题的答案

写递归函数时,要注意递归函数的宏观语义
函数递归其实也是一个函数,和子函数调用是一样的

不要陷进递归函数里边,纠结递归是怎样调用的,而要想递归函数就是一个子函数,可以完成一个特定的功能,利用这个子函数来构建自己的逻辑,解决上层的问题!

递归调用的代价(缺点):

函数调用 + 系统栈空间
函数调用是有时间开销的:记录当前的函数逻辑执行到哪里,当前函数的局部变量的状态,都要压入系统栈
另外本身在计算机底层,找到函数的位置
递归调用消耗系统栈的空间!如果不处理最基本情况,没有终止
另外如果太多,会将系统栈都占满了。。。

递归的优点:

用递归写逻辑更简单
在线性结构中可能不明显,因为线性可以循环
但非线性结构中,如树和图,递归会非常简单

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值