2016-11-24 2 views
0

Я пишу код «рекурсивная перестановка строки» в Python Он разбился после одного цикла дерева (?). Я не могу найти причину. объясните пожалуйста.рекурсия перестановка строки сбой

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

Предполагая, что это не ошибка копирования «n paste», вам необходимо исправить отступ в коде. –

+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'] 
Смежные вопросы