算法图解读书笔记 第3章 递归

递归

递归是很多算法都使用的一种方法,学习如何将问题分为基线条件和递归条件。

3.1 递归
例子,盒子里面找钥匙(盒子里面还有盒子)
方法一:
①创建一个要查找的盒子堆
②从盒子堆取出一个盒子,在里面找
③如果找到的是盒子,就将其加入盒子堆中,以便以后再查找
④如果找到钥匙,大功告成
⑤回到第二步
方法二:
①检查盒子里的每样东西
②如果是盒子就回到第一步
③如果是钥匙就大功告成
其实第一种方法使用的是while循环,只要盒子堆不空,就从中取出一个盒子,并在其中仔细查找。第二种方法就是递归了,函数调用自己。

3.2 基线条件和递归条件
编写递归时必须告诉它何时停止,正因如此每个递归都有两部分:基线条件和递归条件。递归条件是指函数调用自己,而基线条件则是函数不在调用自己,从而避免无线循环。

3.3 栈
调用栈不仅对编程很重要,使用递归时也必须理解这个概念。
3.3.1 调用栈
在计算机内部使用被称为调用栈的栈。
3.3.2 递归调用栈
递归函数也使用调用栈。使用栈很方便,但也要付出代价;存储详尽的信息可能占用大量的内存。每个函数调用都要占用一定的内存,如果栈很高 ,就意味着计算机存储了大量函数调用的信息。这种情况下有两种选择:
①重新编写代码,转而使用循环
②使用尾递归。

小结
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值