2017-01-29 11 views
1
def perms(s): 
    '''(str) -> list of str 
    Return all permutations of s. 
    ''' 
    if s == '': 
    return [''] 
    smaller = perms(s[1:]) 
    print(smaller) 
    bigger = [] 
    for p in smaller: 
    for i in range(len(p) + 1): 
     new_perm = p[:i] + s[0] + p[i:] 
     bigger.append(new_perm) 
    return bigger 

perms('abc') 

これは私の教授のコードです。私は、再帰が、このコードのためにどのように機能するかを取得しますが、より小さいが、 'CB'再帰(順列)の理解Python


パーマ( 'ABC')

S [1:]に等しい方法を見つけ出すように見えることはできません= 'BC'

パーマ( 'BC')

S [1] = 'C'

パーマ( 'C')

S [1] = '

+0

ようこそスタックオーバーフロー!最初に[ツアーに参加する](http://stackoverflow.com/tour)を開き、[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例を作成する方法を学びます。そうすれば、私たちがあなたを助けやすくなります。 –

答えて

0

あなたは再帰的に呼び出します:smaller = perms(s[1:])smaller変数は、perms(s[1:])から返されたものが割り当てられます。

s = 'bc'

i=1p='c'式:

new_perm = p[:i] + s[0] + p[i:] 

は、(次の行にbiggerに付加し、後で戻って再帰呼び出しに戻される)cbと評価されます。

+0

もしあなたが気にしないと、少し詳細を説明することができます – TheGamer

+0

i = 0のときはどうなりますか? – TheGamer

+0

式をコピーし、 'i = 0'を代入して式を出力すると、評価されるものが正確に表示されます。 'small'には値が異なり、' small'には文字ごとに異なる値があることに注意してください。 – alfasin