Что не так с моим рекурсивным алгоритмом генерации всех перестановок (повторяется вечно) - PullRequest
0 голосов
/ 26 июня 2019

Я написал алгоритм для создания всех перестановок списка чисел, и кажется, что я почти на месте. Однако, как только мы вернемся к одному числу, оно зациклится навсегда. Посмотрите на мой код ниже:

def permute(nums):
    if len(nums) == 0 or len(nums) == 1:
        return [nums]

    perms = []

    for i in range(len(nums)):
        prefix = nums.pop(i)

        for permutation_of_suffix in self.permute(nums):

            print(permutation_of_suffix)

            permutation_of_suffix[:0] = [prefix]

            perms.append(permutation_of_suffix)

        nums.insert(i, prefix)

    return perms

Как видите, я добавил оператор печати. Если бы мы запустили перестановку ([1, 2, 3]), то просто напечатали бы

[3]
[3]
[3]

навсегда. Тем не менее, я все еще новичок в области рекурсии и динамического программирования, поэтому не могу понять, что происходит не так. Очевидно, что либо один из циклов выполняется вечно, либо рекурсивный вызов выполняется бесконечно много раз.

Если кто-то может помочь, я буду очень признателен, если вы хотите, чтобы я что-то разъяснил, не стесняйтесь оставлять комментарии, и я обязательно отвечу.

Спасибо, ребята,

1 Ответ

0 голосов
/ 26 июня 2019

вам нужно только изменить эту строку

for permutation_of_suffix in permute(nums):

к этому

for permutation_of_suffix in permute(nums.copy()):
...