Python中递归以及递归遍历目录是怎样的
发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,这篇文章将为大家详细讲解有关Python中递归以及递归遍历目录是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。递归递归的概念:函数包含了对自身的
千家信息网最后更新 2025年02月23日Python中递归以及递归遍历目录是怎样的递归
递归求和
递归处理非线性循环
花钱递归
递归注意事项
实现Tree命令
这篇文章将为大家详细讲解有关Python中递归以及递归遍历目录是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
递归
递归的概念:函数包含了对自身的调用,那么就是递归
使用的场景:如果你发现你将要做的事情就是你现在做的,那么用递归
递归类似循环;在编写或阅读递归时,首先我们关注的是递归的终止条件
递归求和
在接触递归之前,我们先来做这么一个问题:如果说,要对一个数字列表求和(或者其他序列)求和,除了我们可以使用内置的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 = 0for 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 = 0def mysum(L): global sum for var in L: if not isinstance(var,list): #如果其中元素不为列表类型,则为一个确定的值 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 "", line 1, in File " ", line 2, in func File " ", line 2, in func File " ", line 2, in func [Previous line repeated 995 more times]RecursionError: maximum recursion depth exceeded#这里我们在995次递归之后,达到上线,从而报错
我们也可以手动干预递归的上限,但是这是有风险的,要结合计算机本身内存来考虑
>>> import sys>>> sys.setrecursionlimit(num)# num为控制修改的最大递归上限次数
实现Tree命令
核心思路在于,目录结构的深度及广度是错综复杂的,通过单纯的循环来做判定是一件非常苦难的事情
而递归恰好适合这样的非线性循环问题,当然也有一些弊端,当目录结构越来越复杂,那么程序的执行效率会越来越差
import osdef getdir(path, level=0): if path == '': path = os.getcwd() # 获取当前的工作目录 level += 4 num = level // 4 abs_path = os.path.abspath(path) for name in os.listdir(path): # 返回的是一个列表 format_str = '' if os.path.isfile(os.path.join(abs_path, name)): for var in range(num): # range函数用来控制循环次数 format_str += '_' * 4 + '▕' format_str = format_str[0:-1] format_str += name mystr = format_str.replace('_', ' ', level-4) # 替换掉level-4个_ else: for var in range(num): # range函数用来控制循环次数 format_str += '_' * 4 + '▕' # 输出样式构造 format_str += name mystr = format_str.replace('_',' ',level-4) # 替换掉level-4个_ print(mystr) # 输出格式字符串 name = os.path.join(abs_path,name) if os.path.isdir(name): # 绝对路径,判断是否是文件夹 getdir(name,level)path = input('请输入你要遍历的目录:')getdir(path)
关于Python中递归以及递归遍历目录是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
递归
循环
目录
函数
元素
条件
次数
处理
控制
复杂
普通
上限
内存
非线性
最大
事情
内容
就是
文章
更多
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全通报体系建设
常州网络技术培训
西工大网络安全就业情况
微信公众号配置服务器
网络安全认证资质证明
软件开发公司出纳
软件开发具体指的是哪个方面
变频器功能软件开发
怎样学网络技术
金山区网络软件开发服务收费
数据库中添加限制数字长度规则
重庆net软件开发哪家便宜
网络安全和家庭教育观后感
七日杀不加载服务器
北京软件开发工资13000
通过web管理服务器
深圳自主可控软件开发费用
网络安全年终盘点
分盘会员软件开发
编钟课件软件开发
windows云服务器怎么代理
利用农牧民夜校网络安全
查看数据库中的存储引擎
mysql数据库退出命令
工程软件开发需要电脑吗
lol突然登录不了服务器
数据库自动化系统基础知识
让单人游戏拥有服务器一般的模组
苏州软件开发公司 凌锐
存储服务器安装后会格式化硬盘吗