关于递归和循环

能用循环解决的问题尽量都用循环

如果坚持要用递归,就要搞清递归的返回值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)

  

 

posted @ 2018-08-21 17:45  amberLIU  阅读(492)  评论(0)    收藏  举报