python的递归女神自拍_python干活系列----递归

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

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

递归的执行速度特别慢

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

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

你一看,那我用它干嘛,这么可怕。先列举他的缺点就是让你明白能不用就不用,但是还要说他是因为有些场景你不用不行,碰到这些情况的时候你就会觉得他老牛逼了。 例子一: 1.打印下面的地点名称 2.查看地区是否在列表里

[

{

"text":"北京",

"children":[

{"text":"朝阳","children":[]},

{"text":"昌平","children":[

{"text":"沙河","children":[]},

{"text":"回龙观","children":[]}

]},

]},

{

"text":"上海",

"children":[

{"text":"宝山","children":[]},

{"text":"金山","children":[]},

]}

]

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

需求一答案:

def recursion(list):

for item in list:

print(item["text"])

recursion(item["children"])

recursion(list)

需求二答案:

def recursion(list,name):

for item in list:

if item["text"]==name:

return True

else:

if recursion(item["children"],name):                return True

else:

return Falseprint(recursion(list,"沙河"))->Trueprint(recursion(list,"MrXu"))->False

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

def isRecursion(list,name):

for item in list:

if item["text"]==name:

return True

else:

isRecursion(item["children"],name)

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

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

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

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

# 递归里面的执行的时候外面的真的没有执行完毕def isComplete(num):

num=int(num/2)

print(num)    if num:

isComplete(num)

print(num)

isComplete(4)#结果: 2 1 00 1 2

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值