Выход из рекурсивной функции в Python - PullRequest
0 голосов
/ 08 февраля 2020

Я построил следующую функцию Python, которая печатает перестановки на наборах произвольной длины. Входами в функцию являются начальный индекс набора (а), конечный индекс набора (б) и набора (например, [1,2,3]), а выход - [[1,2,3], [ 1,3,2], ...]. Функция, написанная ниже, печатает результаты, но мне нужна функция, которая «возвращает» результаты.

def backtracking (a, b, seed):
if a == b:
        print(seed)
    else:
        for i in range(a, b+1):
            seed[a], seed[i] = seed[i], seed[a]
            backtracking(a + 1, b, seed)
            seed[a], seed[i] = seed[i], seed[a]

nums = [1,2,3]
backtracking(0,len(nums) - 1,list(nums))

Код здесь представляет собой попытку вернуть результат, но вывод находится в форме [ 1,2,3,1,3,2, ...], тогда как я хочу [[1,2,3], [1,3,2], ...]. Я могу легко преобразовать результат позже, но я хотел бы получить чистое решение, которое напрямую выводит желаемый результат из функции. Я также попытался изменить строку 3 следующим образом: output + = [seed], и в результате получился просто повторный список [1,2,3]. Аналогично для output.append (seed). Почему output.append (seed) не добавляется к выводу должным образом, и как я могу это сделать? Любая помощь в решении этой проблемы будет принята с благодарностью.

def backtracking (a, b, seed, output):
    if a == b:
        output += seed
    else:
        for i in range(a, b+1):
            seed[a], seed[i] = seed[i], seed[a]
            backtracking(a + 1, b, seed, output)
            seed[a], seed[i] = seed[i], seed[a]
        return(output)

nums = [1,2,3]
backtracking(0,len(nums) - 1,list(nums),[])
...