《算法图解》总结第 3 章:while循环、递归、栈

仅用于记录学习,欢迎批评指正,大神勿喷

系列文章目录

《算法图解》总结第 1 章:二分查找、大O表示法;
《算法图解》总结第 2 章:数组和链表,选择排序;
《算法图解》总结第 3 章:while循环、递归、栈;
《算法图解》总结第 4 章:分而治之、快速排序;
《算法图解》总结第 5 章:散列表;
《算法图解》总结第 6 章:广度优先搜索;
《算法图解》总结第 7 章:狄克斯特拉算法;
《算法图解》总结第 8 章:贪婪算法
《算法图解》总结第 9 章:动态规划
《算法图解》总结第 10 章:K最近邻算法
《算法图解》总结第 11 章:十种算法简介


while循环 & 递归

举例说明两者区别:发现一个上锁的神秘箱子,钥匙可能在一个盒子里,但是这个盒子里有盒子,盒子里的盒子又有盒子,钥匙在某个盒子里。
while循环来解决这个问题:
(1)创建一个要查找的盒子堆;
(2)从盒子里取出一个盒子,在里面找;
(3)如果找到的是盒子,将其加入盒子堆里,以便以后再查找;
(4)如果找到钥匙大功告成;
(5)返回第二步,继续拆盒子。
简而言之:只要盒子堆不空,就从中取一个盒子,并在其中仔细查找。
算法实现:Python
在这里插入图片描述
递归来解决这个问题:
(1)检查盒子里的每样东西;
(2)如果是盒子,就回到第一步;
(3)如果是钥匙,就大功告成。
简而言之:拿到一个盒子,就一直拆,要么拆到有钥匙,要么拆完。
算法实现:Python
在这里插入图片描述
递归条件:基线条件和递归条件
编写递归函数时,必须告诉它何时停止递归,避免形成无线循环。因此每个递归函数都有两部分:基线条件和递归条件。递归条件指的是函数调用自己,而基线条件指的是函数不再调用自己,从而避免形成无限循环。
举例说明:
在这里插入图片描述

这是没有添加基线条件的递归函数,若i从3开始,将输出3,2,1,0,-1,-2…形成无限循环,必须强行停止。因此我们给countdown函数添加基线条件:
在这里插入图片描述

栈是一种简单的数据结构,只有两种操作:压入(插入)和弹出(删除并读取)。栈有先入后出的特点。
调用栈:这个栈用于存储多个函数的变量(在当前函数中调用其他函数)。
递归调用栈:递归函数中也使用了调用栈。以阶乘函数为例,编写Python代码如下:
在这里插入图片描述
栈的缺点:调用栈可能很长,这将占用大量内存,解决方法有两个:(1)重新编写代码,转而使用循环;(2)使用尾递归。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值