2016-11-24 34 views
0

私はPythonでコード "再帰置換文字列"を書いています 1つのツリー(?)サイクル後にクラッシュしました。 理由がわかりません。それについて説明してください。再帰パーミュテーション文字列クラッシュ

memory = [] 
memory2 = [] 

def permutation(s): 


if len(s)==1: 
    return s 


for i,char in enumerate(s): 
    returns= permutation(s[:i] + s[i+1:]) 
    print(returns) 
    if returns == None: 
     for j in memory: 
      memory2.append(s[i] + j) 
     memory = [] 
    memory.append(s[i] + returns) 
    print(memory) 
s = "ABC" 
print(permutation(s)) 

それはループのために次に行くべきメモリ[CB、BC] を形成した後。 しかし、それだけでそれを終了します。

私はあなたがあなたの状態で '他' を忘れていると思います
+2

クラッシュの内容を投稿できますか?どのようなエラーがスローされ、どのラインがそれを引き起こしていますか? – Omada

+0

これはコピーアンドペーストエラーではないと仮定し、コード内にインデントを修正する必要があります。 –

+0

また、 'itertools.permutations'を使用できますか? –

答えて

0

memory = [] 
memory2 = [] 

def permutation(s): 
    global memory 
    global memory2 

    if len(s)==1: 
     return s 

    for i, char in enumerate(s): 
     returns = permutation(s[:i] + s[i+1:]) 

     if returns == None: 
      for j in memory: 
       memory2.append(s[i] + j) 
      memory = [] 
     else: # <--- here 
      memory.append(s[i] + returns) 

s = "ABC" 
permutation(s) 
print(memory2) 
0

あなたがそうのようなあなたの関数を修正することができます。

def permutations(s): 
    if len(s) <= 1: 
     return [s] 
    result = [] 
    for i, letter in enumerate(s): 
     for perm in permutations(s[:i] + s[i + 1:]): 
      result.append(letter + perm) 
    return result 

や標準ライブラリ関数itertools.permutations使用:

from itertools import permutations 
perms = ["".join(perm) for perm in permutations(s)] 

両方とも同じ結果を返します。

s = "abc" 
print(permutations(s)) # ['abc', 'acb', 'bac', 'bca', 'cab', 'cba'] 
関連する問題