鱼C论坛

 找回密码
 立即注册
查看: 3202|回复: 5

[已解决]030 第2题 为什么递归调用后切记返回上一层目录

[复制链接]
发表于 2018-12-11 20:55:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
琢磨了很久也看了一些分析贴可是还是很迷糊~
import os

def search_file(start_dir, target) :
    os.chdir(start_dir)
    
    for each_file in os.listdir(os.curdir) :
        if each_file == target :
            print(os.getcwd() + os.sep + each_file) # 使用os.sep是程序更标准
        if os.path.isdir(each_file) :
            search_file(each_file, target) # 递归调用
            os.chdir(os.pardir) # 递归调用后切记返回上一层目录

start_dir = input('请输入待查找的初始目录:')
target = input('请输入需要查找的目标文件:')
search_file(start_dir, target)
最佳答案
2018-12-12 15:51:14
为啥返回上一级呢?

因为如果这一级找不到,你得返回上一级继续找,不能一个文件夹死到底。

如C:\BACKUP\Programe\Drive文件夹,一直钻到Drive文件夹里,但是没有目标文件怎么办?或者是个空文件夹怎么办?

这种情况就得返回上一级目录,在上一级目录中所有的同级目录中寻找,如果没有,再返回上一级。..

类推。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-12-11 21:10:37 | 显示全部楼层
你进了个文件夹A,里面有B,C,D文件夹,于是你先进了B,B里你搜索完了是不是得出来看C
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-11 21:10:57 | 显示全部楼层
不要执着在代码上。
想像用生活中的例子
比如你亲戚家拜年,总会有回的一天吧。
再比如你去几个地方旅游,玩完之后原路返回最后到家;(注意不是直接回家,这就跟递归一个道 理了)

一句话就是  有去有回。

除非你不回了;那就不叫递归了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-12 15:51:14 | 显示全部楼层    本楼为最佳答案   
为啥返回上一级呢?

因为如果这一级找不到,你得返回上一级继续找,不能一个文件夹死到底。

如C:\BACKUP\Programe\Drive文件夹,一直钻到Drive文件夹里,但是没有目标文件怎么办?或者是个空文件夹怎么办?

这种情况就得返回上一级目录,在上一级目录中所有的同级目录中寻找,如果没有,再返回上一级。..

类推。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2018-12-12 16:15:05 | 显示全部楼层
heidern0612 发表于 2018-12-12 15:51
为啥返回上一级呢?

因为如果这一级找不到,你得返回上一级继续找,不能一个文件夹死到底。

比如A文件夹下有B文件夹(里面没有目标文件)和C文件夹(有目标文件)
B文件夹里没有找到,结束;但是有for each_file in os.listdir(os.curdir),后面不是也会查询C文件夹有没有目标文件吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-12 17:49:03 | 显示全部楼层
本帖最后由 heidern0612 于 2018-12-12 18:08 编辑
胖豆lucky 发表于 2018-12-12 16:15
比如A文件夹下有B文件夹(里面没有目标文件)和C文件夹(有目标文件)
B文件夹里没有找到,结束;但是有 ...



它实现的流程是:因为递归,一个文件夹先钻到底,没有的话往回返。因为for循环,没有目标文件的话,搜索上一级全部,再搜索上上一级全部...

看这个:戳我前进
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-9 01:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表