递归值默认更改

时间:2012-10-16 16:31:20

标签: python recursion default

我想确保在每次递归开始时'rep'不会为0。在当前点,它默认为从0开始,但我希望它保存rep + = 1的值。

有一个简单的解决办法吗?

def printPattern(n,k,rep =0):
    'prints a pattern of stars'
    if n == k:
        print ('{}{}'.format(' '*rep,'*'*n))
    elif n%2 == 0:
        rep+=1
        print ('{}{}'.format(' '*rep,'*'*n))
        printPattern(n+1,k)
    else:
        rep+=1
        print ('{}*'.format(' '*rep))
        printPattern(n+1,k)

2 个答案:

答案 0 :(得分:1)

您可以从递归调用中实际传递rep开始

printPattern(n+1,k, rep)

def printPattern(n,k,rep =0):
    'prints a pattern of stars'
    if n == k:
        print ('{}{}'.format(' '*rep,'*'*n))
    elif n%2 == 0:
        rep+=1
        print ('{}{}'.format(' '*rep,'*'*n))
        printPattern(n+1,k, rep)
    else:
        rep+=1
        print ('{}*'.format(' '*rep))
        printPattern(n+1,k, rep)

答案 1 :(得分:1)

    rep+=1
    print ('{}{}'.format(' '*rep,'*'*n))
    printPattern(n+1,k, rep)

如果将新值rep作为第3个参数传递,则不会使用默认值0。

因此,当您第一次调用此函数时,您实际上可以跳过使用第3个参数,然后将使用默认值。但下一次,对此函数的每次递归调用都将rep作为第三个参数,作为rep的当前值传递