鱼C论坛

 找回密码
 立即注册
查看: 984|回复: 4

[已解决]问题如下黄字所示,对递归调用不是很理解

[复制链接]
发表于 2020-3-24 17:06:52 | 显示全部楼层 |阅读模式

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

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

x
微信图片_20200324170618.png

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) # 递归调用后切记返回上一层目录(为什么要返回上一步,还有程序怎么时候才运行到这一步,递归调用search_file()的时候应该没有到这一步吧)

start_dir = input('请输入待查找的初始目录:')
target = input('请输入需要查找的目标文件:')
search_file(start_dir, target)
最佳答案
2020-3-24 17:41:28
咸蛋之咸鱼翻身 发表于 2020-3-24 17:38
运行完上一步后程序不就是回到了函数开头位置吗,应该没有运行os.chdir()吧

开始运行上一步程序时,会跳到函数的开头,当执行完之后会返回调用函数的位置。
你该回去学习一下函数的调用。
函数调用,从哪里开始,就从哪里结束。也就是从哪里调用的函数,函数执行完后就返回到哪里
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-24 17:22:32 | 显示全部楼层
这一行的上一行不就是递归调用么?
当运行完上一行的递归之后,当前路径os.curdir已经变为深一层的路径,所以需要用这一行将路径复原
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-24 17:38:06 | 显示全部楼层
sunrise085 发表于 2020-3-24 17:22
这一行的上一行不就是递归调用么?
当运行完上一行的递归之后,当前路径os.curdir已经变为深一层的路径, ...

运行完上一步后程序不就是回到了函数开头位置吗,应该没有运行os.chdir()吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-24 17:41:28 | 显示全部楼层    本楼为最佳答案   
咸蛋之咸鱼翻身 发表于 2020-3-24 17:38
运行完上一步后程序不就是回到了函数开头位置吗,应该没有运行os.chdir()吧

开始运行上一步程序时,会跳到函数的开头,当执行完之后会返回调用函数的位置。
你该回去学习一下函数的调用。
函数调用,从哪里开始,就从哪里结束。也就是从哪里调用的函数,函数执行完后就返回到哪里
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-24 17:46:13 | 显示全部楼层
内置运行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-24 17:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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