为什么我的递归函数没有采用第二个参数?

时间:2014-11-02 15:45:56

标签: python for-loop recursion

"""

def permNums(inp,sec):
    newInp = []
    for i in inp:
        for j in sec:
            if j not in i: newInp.append( i+j )      #I put the print after this line
    return newInp


b = permNums(permNums(permNums(inp='word',sec='word')))

print b
"""


def permNums(inp):
    newInp = []
    for i in inp:
        for j in 'word':
            if j not in i: newInp.append( i+j )
    return newInp


b = permNums(permNums(permNums(inp='word')))

print b

我认为已经注释掉的代码和没有注释的代码应该是等价的。注释掉的代码引发了一个错误,说我只给了1个参数而不是2.我在哪里错了?

我尝试在

之后立即放置打印功能
 if j not in i: newInp.append( i+j )

,在注释掉的代码中,注意到最里面的函数被调用,但是在第二次递归时给出了一个错误,可能是因为它没有采取' sec'作为一个论点..有人可以帮我解决这个问题。

1 个答案:

答案 0 :(得分:3)

问题来自第二次通话。让我来说明一下。当返回内部调用的结果时,Python必须执行以下操作:

permNums(result_of_previous_call)  # sec won't implicitly carry through.

这显然只是一个论点。因此,要修复已注释掉的注释,需要为每个调用提供额外的sec参数:

b = permNums(permNums(permNums(inp='word', sec='word'), sec='word'), sec='word')