• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Python中递归以及递归遍历目录详解

python 搞代码 4年前 (2022-01-09) 25次浏览 已收录 0个评论

递归

递归的概念:函数包含了对自身的调用,那么就是递归

使用的场景:如果你发现你将要做的事情就是你现在做的,那么用递归

递归类似循环;在编写或阅读递归时,首先我们关注的是递归的终止条件

递归求和

在接触递归之前,我们先来做这么一个问题:如果说,要对一个数字列表求和(或者其他序列)求和,除了我们可以使用内置的sum函数,还有什么办法?

while循环

L = [1,2,3,4,5]
mysum = 0 #保存和的变量
while L: #将列表最为循环条件
	mysum += L[0] #每次将列表第一个位置的值加到和中
	L = L[1:] #去掉列表第一个元素

for循环

L = [1,2,3,4,5]
mysum = 0
for var in L:
	mysum += var

递归求和

def mysum(L):
    if not L:
        print ('L is empty')
        return 0
    else:
      	return L[0]+mysum(L[1:])
# 在返回值中,我们返回了一个函数的调用,并且传递的参数为去掉当前列表第一个元素的新列表

递归处理非线性循环

递归还可以处理一些非线性循环,而普通的循环是无法处理的;比如这样一个列表对其求和:

L = [1,[2,[3,4],5],6,[7,8]]

由于这个列表不是一个线性迭代,包含着复杂的元素嵌套,普通的循环语句处理起来将会非常难以控制

L = [1,[2,[3,4],5],6,[7,8]]
sum = 0
def mysum(L):
    global sum
    for var in L:
    	if not isinstance(var,list):   
          <i>本文来源gaodai$ma#com搞$$代**码网</i>  #如果其中元素不为列表类型,则为一个确定的值
            sum += var
        else:
         	mysum(var)
    return

花钱递归

思考:假如你有10000块,每天花一半,毛钱直接舍弃,那么这钱可以花几天?

递归解决:

def cost(money,day=0):
    if money > 0:
        money = money // 2 #每次花一半
        day += 1 #花完天数+1
        cost(money,day) #开启花钱递归
    else:
        print('一共可以花%d天' % day)
        return #必须要有的一个终止条件

递归注意事项

Python中,递归的最大上限次数差不多是998次,一个没有终止条件的递归会引发错误(类似一个死循环)

这是因为递归的每一次函数执行,都会在内存中产生新的函数副本,递归的内存消耗要大于普通循环

>>> def func():
...     return func()
...
>>> func()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in func
  File "<stdin>", line 2, in func
  File "<stdin>", line 2, in func
  [Previous line repeated 995 more times]
RecursionError: maximum recursion depth exceeded
#这里我们在995次递归之后,达到上线,从而报错

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Python中递归以及递归遍历目录详解

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址