递归函数调用

时间:2015-12-01 06:43:42

标签: python recursion

我的函数的基本思想是:我试图复制unix命令“cd ../”(这会导致选择父目录),但我希望能够输入“cd ../。 ./“(作为命令行参数)。

所以我正在尝试递归调用。该函数将查找字符串是否包含“../”,如果是,则调用我的函数upOneDir()(这将有效地将程序目录更改为父级),然后调用自身(dotDotSlash())。

def dotDotSlash():
    s = sys.argv[2]
    dotDotSlash = "../"

    if (s.find(dotDotSlash) == -1):
        print "not found"

    else:
        print "found ../ at: "
        print s.find(dotDotSlash)
    upOneDir()
    dotDotSlash()

当我尝试输入“cd ../../”时,该函数只执行一次然后给我这个错误:

Traceback (most recent call last):
  File "test3.py", line 59, in <module>
    dotDotSlash()
  File "test3.py", line 40, in dotDotSlash
    dotDotSlash()
TypeError: 'str' object is not callable

关于函数为什么没有正确调用自己的任何想法?

2 个答案:

答案 0 :(得分:1)

您使用与函数dotDotSlash相同的名称命名变量dotDotSlash()。将此变量dotDotSlash = "../"的名称更改为dotDotSlash_var = "../"

答案 1 :(得分:1)

您覆盖了对该函数的引用。 Python没有区分函数的名称和任何其他对象的名称。请拨打'../'其他内容,以免干扰。

此外,需要使用return dotDotSlash()返回递归调用。另外,递归函数的重点是你发送一个参数,它修改参数,然后再次将修改后的参数发送给函数,直到它到达一个定义的停止点。我建议在尝试创建递归版本之前尝试使用循环实现函数。

你可能只是做for i in range(sys.argv[2].count('../')): upOneDir()的事情。