0

各再帰の開始時に '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)
4

2 に答える 2

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)
于 2012-10-16T16:32:48.093 に答える
1
    rep+=1
    print ('{}{}'.format(' '*rep,'*'*n))
    printPattern(n+1,k, rep)

3 番目のパラメータとして新しい値を渡すrepと、デフォルト値 0 は使用されません。

したがって、この関数を初めて呼び出すときは、実際には 3 番目のパラメーターを使用してスキップできます。その後、デフォルト値が使用されます。しかし、次回、この関数へのすべての再帰呼び出しはrep、3 番目のパラメーターとして取り、現在の値として渡されます。rep

于 2012-10-16T16:32:56.567 に答える