python干活系列-递归

虽然把递归纳入了python底下,但是递归只是一个概念,很多种语言都可以使用递归,如js

对于资深程序员来说递归不算什么,对于小白来说这个词他可能觉得很厉害,但是具体使用场景以及局限性可能了解的并不是特别多。首先将几个缺点减少一下你对递归的期待吧

递归的执行速度特别慢

递归特别耗内存,容易造成内存溢出(耗内存的原因下文会解释)

必须要有一个约束条件,没有就会变成死循环,最终导致内存不足

你一看,那我用它干嘛,这么可怕。先列举他的缺点就是让你明白能不用就不用,但是还要说他是因为有些场景你不用不行,碰到这些情况的时候你就会觉得他老牛逼了。

例子一:

1.打印下面的地点名称

2.查看地区是否在列表里

你乍一看可能觉得这有什么难的,可你写起来的时候你会发现没法循环嵌套的,原因很简单就是因为他嵌套了几层你不知道。这种典型的问题就要用到递归了,话不多说直接上代码:

需求一答案:

需求二答案:

如果你不是只寻求答案,而是很仔细的看了这段代码你会发现,这里面有好多return,直接找到了结果返回一个True,找不到结果返回一个False不就可以了么为什么还要再加入下面的代码呢?

我将上面的代码改造一下:

我在接着调用isRecursion(list,”沙河”),结果返回了None,这里你必须要明白你得到的返回值一定是最外面这一层的,当你输入沙河的时候第一层嵌套是不是没有返回值呢,所以你需要层层都有返回值才行。这里有点绕但是你必须要搞懂

上面这俩个需求也是递归最常用的场合,很经典。

在这里解释一下为什么递归会有那三个缺点:

首先递归是函数嵌套的,大家都知道函数没有执行完的时候回一直存活在内存里面,也就是里面调用了外面时外面的函数是还没有执行完的,当一直嵌套的时候外面的就会一直被挂在内存里。举个例子吧,让你更好的理解一下:

0之后又重新打印了1跟2就证明了这个事情,这也导致了递归的另外俩个缺点就是,执行速度慢和必须要有限制条件

例子来源于路费学城的的21天python,目前博主正在看,主讲alex讲的非常棒,很适合小白入门。并不是在做广告,而是希望能够帮助到更多想要进军计算机行业的人

想第一时间获取博主资料可关注吵吵日记

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180418G0BAAT00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励