Форум сайта python.su
Разбираю работу рекурсивной функции
def gen_numbers(N:int, M:int, prefix = None): """Генерирует все числа в системе счисления N, колво позиций M, prеfix - полученное число, тип список """ prefix = prefix or [] if M==0: print(prefix) else: for digit in range(N): prefix.append(digit) gen_numbers(N, M-1, prefix) prefix.pop()
for digit in range(N): gen_numbers(N, M-1, prefix.append(digit))
Офлайн
Видимо, связано с какими-то свойствами типа list. Если переделать со строкой, то работает
def gen_numbers(N:int, M:int, prefix = ""): """Генерирует все числа в системе счисления N, колво позиций M, prеfix - полученное число """ if M==0: print(prefix) else: for digit in range(N): gen_numbers(N, M-1, prefix + str(digit))
Офлайн
prefix.append(digit)
orel_daappend не создает копию списка, с чего вы это вообще взяли?
При вызове функции создается копия списка prefix.
Офлайн
FishHookappend конечно не создает копию списка. Создается копия списка для функции gen_numbers, когда этот список передается в аргументы.
Офлайн
Офлайн
gen_numbers(N, M-1, prefix.append(digit))
gen_numbers(N, M-1, None)
Офлайн
xam1816Поняла, спасибо. Когда я метод
prefix.append(digit)
prefix.append(digit)
Офлайн