Skip to main content
 首页 » 编程设计

python之为什么这个递归函数打印出的结果与我预期的相反

2025年05月04日18jiqing9006

这是我的 Python 2.7 脚本。

import os.path, shutil 
 
def makeFolderName(num, dirBase='./interactive'): 
    destDir=    dirBase + '-' + str(num) + '/' 
    if os.path.isdir(destDir): 
        num += 1 
        makeFolderName(num) 
    else: 
        shutil.copytree(dirBase, destDir) 
 
    print destDir 
    return destDir 
 
 
folderName= makeFolderName(1) 
 
print folderName 

这是打印输出。

./interactive-18/ 
./interactive-17/ 
./interactive-16/ 
./interactive-15/ 
./interactive-14/ 
./interactive-13/ 
./interactive-12/ 
./interactive-11/ 
./interactive-10/ 
./interactive-9/ 
./interactive-8/ 
./interactive-7/ 
./interactive-6/ 
./interactive-5/ 
./interactive-4/ 
./interactive-3/ 
./interactive-2/ 
./interactive-1/ 
====./interactive-1/ 

在该方法中,我认为如果 destDir 的值不是目录,这只会打印 destDir。它而是从最高值到最低值打印 num。

而folderName的值是最低的num,而不是最高的。

我希望 makeFolderName 返回一个目录名称,其中 num 比当前目录中存在的目录高一个。

我做错了什么?

请您参考如下方法:

你的错误是你应该在递归调用之后返回:

    if os.path.isdir(destDir): 
        num += 1 
        return makeFolderName(num) 
    else: 
        shutil.copytree(dirBase, destDir) 

如果你不这样做,那么当makeFolderName返回时,这个函数会继续运行下面的代码,也就是打印num。但由于它是在递归调用返回后完成的,所以您会看到相反的数字。