咸蛋之咸鱼翻身 发表于 2020-3-24 17:06:52

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



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)

sunrise085 发表于 2020-3-24 17:22:32

这一行的上一行不就是递归调用么?
当运行完上一行的递归之后,当前路径os.curdir已经变为深一层的路径,所以需要用这一行将路径复原

咸蛋之咸鱼翻身 发表于 2020-3-24 17:38:06

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

运行完上一步后程序不就是回到了函数开头位置吗,应该没有运行os.chdir()吧

sunrise085 发表于 2020-3-24 17:41:28

咸蛋之咸鱼翻身 发表于 2020-3-24 17:38
运行完上一步后程序不就是回到了函数开头位置吗,应该没有运行os.chdir()吧

开始运行上一步程序时,会跳到函数的开头,当执行完之后会返回调用函数的位置。
你该回去学习一下函数的调用。
函数调用,从哪里开始,就从哪里结束。也就是从哪里调用的函数,函数执行完后就返回到哪里

wangka 发表于 2020-3-24 17:46:13

内置运行
页: [1]
查看完整版本: 问题如下黄字所示,对递归调用不是很理解