Форум сайта python.su
Всем привет. В общем, читаю книги, смотрю видео, нигде не поясняют, как поэтапно конкретно работает данный код.
def move(n, start, finish): if n == 1: print(n, start, finish) else: tmp = 6 - start - finish move(n - 1, start, tmp) print(n, start, finish) move(n - 1, tmp, finish) move(3, 1, 3)
Отредактировано Ktulich (Ноя. 10, 2022 11:56:56)
Офлайн
Ktulichn - 1 ?
n не меняет значение.
Отредактировано m1r42 (Ноя. 10, 2022 08:09:38)
Офлайн
m1r42если вычитать, то тоже не совпадает
Офлайн
Ktulichгы, лучше подумайте с какими входящими параметрами запускается каждый раз функция move()
если вычитать, то тоже не совпадает
Офлайн
move(x,y,z) выполняется всегда, независимо от if else, хочешь этого или нет
рекурсия, может слыхали?
тут я не прав
move() запускается по условию n != 1
Отредактировано m1r42 (Ноя. 10, 2022 10:32:40)
Офлайн
Ktulich
хотя n не меняет значение.
move(n - 1, start, tmp)
Офлайн
Ладно. Не выдержал. Так будет понятней?
def move(n, start, finish): if n == 1: if finish == 2: print(n, start, finish, "Я первый принт, я запущен с finish = tmp") else: print(n, start, finish, "Я третий принт") else: tmp = 6 - start - finish move(n - 1, start, tmp) print(n, start, finish, "Я второй принт") move(n - 1, tmp, finish) move(2, 1, 3)
1 1 2 Я первый принт, я запущен с finish = tmp
2 1 3 Я второй принт
1 2 3 Я третий принт
Отредактировано m1r42 (Ноя. 10, 2022 10:25:26)
Офлайн
Еще вариант, более наглядный, так как вводные данные могут изменяться:
n = 3 start = 2 finish = 1 temp = 6 - start - finish def move(n, start, finish): if n == 1: if finish == temp: print(n, start, finish, "Я первый принт, я запущен с finish = temp") else: print(n, start, finish, "Я третий принт") else: tmp = 6 - start - finish move(n - 1, start, tmp) print(n, start, finish, "Я второй принт") move(n - 1, tmp, finish) move(n, start, finish)
1 2 1 Я третий принт
2 2 3 Я второй принт
1 1 3 Я первый принт, я запущен с finish = temp
3 2 1 Я второй принт
1 3 2 Я третий принт
2 3 1 Я второй принт
1 2 1 Я третий принт
Отредактировано m1r42 (Ноя. 10, 2022 10:45:29)
Офлайн
xam1816
как вы можете утверждать что n не меняет значение если n - 1???
Офлайн
m1r42что то я смотрю на ваш пример и только больше путаюсь
Еще вариант, более наглядный, так как вводные данные могут изменяться:
move(3, 1, 3)
def move(n, start, finish)
def move(3, 1, 3)
if n == 1: print(n, start, finish)
else: tmp = 6 - start - finish
move(n - 1, start, tmp)
move(2, 1, 2)
print(n, start, finish)
move(n - 1, tmp, finish)
move(2, 2, 3)
Офлайн