关于递归和循环
能用循环解决的问题尽量都用循环
如果坚持要用递归,就要搞清递归的返回值return问题
然后介绍一种新的循环解决递归问题的思路,堆栈思想
例子:使用python代码统计一个文件夹中所有文件的总大小,因为os.path.getsize()只能计算文件的大小,所以思路如下
1. 拿到这个文件夹下所有的文件夹 和 文件
2. 是文件就取大小
3. 是文件夹 再打开这个文件夹 : 循环
递归
import os
def get(path):
sum_size=0
list_dir=os.listdir(path)
for file in list_dir:
file_path=os.path.join(path,file)
if os.path.isdir(file_path):
size=get(file_path)
sum_size+=size
else:
sum_size+=os.path.getsize(file_path)
return sum_size
print(get(r'C:\Users\Administrator\PycharmProjects\untitled1'))
因为递归最难的就是递推过程,return只能给上一级返回值,所以要考虑的是怎么接这个返回值
如果搞不清返回值,就跟着程序过一遍,然后递归一次,复制一遍程序,接着流程走,直到搞清返回值怎么写
循环,堆栈思想
列表,先进来的后出去
lst=[r'C:\Users\Administrator\PycharmProjects\untitled1'] #列表中的内容就是要统计的目录
sum_size=0
while lst: #只要列表不空,就一直循环
path=lst.pop() #第一次,lst为空, path=r'C:\Users\Administrator\PycharmProjects\untitled1'
# 删除列里中的最后一个元素,取得对应的数据
file_path=os.listdir(path) #打开文件夹
for el in file_path: #遍历元素
el_path=os.path.join(path,el) #拼接路径
if os.path.isdir(el_path):
lst.append(el_path) #如果是文件夹,就添加到列表里
else:
sum_size+=os.path.getsize(el_path) #如果是文件就记录大小,然后消失
print(sum_size)

浙公网安备 33010602011771号