函数之递归函数
2018-11-04 本文已影响3人
endmoon
#查找某个文件下的所有文件和目录
'''
1.os.listdir 用于列出所有目录和文件
2.os.isfile用于判断类型是否为文件
3.os.isdir用于判断类型是否为目录
为目录时需要进入到目录,需要用到os.path.join(当前目录,子目录)
代码步骤:
1.输入一个路径(目录),这个作为函数的参数
def set_path(path):
2.列出该路径下的所有文件和目录,list_file中存放的是改目录下所有文件和目录
list_file=os.listdir(path)
3.遍历该目录,获得子文件和目录
for file in list_file:
4.得到该文件的绝对路径=path(当前目录路径)+file(该目录下的子文件或目录名)
file_path=os.path.join(path,file)
5.判断该文件为文件还是目录,如果是文件,就打印该文件名
if os.isfile(file_path):
print(file)
6.判断该文件为文件还是目录,如果是目录,就把新的目录作为参数以递归函数的形式进行重复调用
if os.isdir(file_path):
set_path(file_path)
'''
import os
def set_path(path):
list_file = os.listdir(path)
for file in list_file:
try:
file_path = os.path.join(path, file)
if os.path.isfile(file_path):
print(file)
if os.path.isdir(file_path):
set_path(file_path)
except(PermissionError,FileNotFoundError) as e:
print("没有权限访问")
if __name__=="__main__":
result=set_path('c:\\')
递归最核心的思想是:每一次递归,整体问题都要比原来减小,并且递归到一定层次时,要能直接给出结果!
每一个递归程序都遵循相同的基本步骤:
1.初始化算法。递归程序通常需要一个开始时使用的种子值(seed value)。可以向函数传递参数,或者提供一个入口函数,这个函数是非递归的,但可以为递归计算设置种子值。
2.检查要处理的当前值是否已经与基线条件相匹配(base case)。如果匹配,则进行处理并返回值。
3.使用更小的或更简单的子问题(或多个子问题)来重新定义答案。
4.对子问题运行算法。
5.将结果合并入答案的表达式。
6.返回结果。