Форум сайта python.su
KtulichДержи, дружище, программа веселей если с шутками.
что то я смотрю на ваш пример и только больше путаюсь
n = 3 start = 2 finish = 1 def move(n, start, finish, check): print("запустился move c параметрами",n,start,finish) if n == 1: print("печатаем че надо этому программисту") print("задолбался я уже считать эту головоломку") print("лучше бы в Heroes III поиграли") print(n, start, finish," ",check) print("данный move закончил свой жизненный цикл","\n") else: print("первый параметр n не равен 1 ща расчитаем tmp и запихуем в finish") print("да еще и от n отнимем 1 чтобы было веселей") tmp = 6 - start - finish print("n = ",n-1) print("start = ",start) print("finish = ",tmp) check += 1 move(n - 1, start, tmp , check) print(",а это твой следующий результат, подавись") print("и посмотри где move запустился с такими параметрами") print(n, start, finish," ",check) print("что не смешно? то,то! А мне думаешь весело считать эту чупуху?") check += 1 print("теперь от n отнимем 1, чтобы тебе голову сломать") print("и в старт впихуем tmp которая, так, между прочим равна",tmp) print("n = ",n - 1) print("start = ",tmp) print("finish = ",finish) move(n - 1, tmp, finish, check) check = 1 move(n, start, finish, check)
n = 3 start = 2 finish = 1 def move(n, start, finish, check): print("запустился move c параметрами",n,start,finish) print("номер запуска move на всякий случай чтобы ты голову не сломал ",check) print("у нас же все таки рекурсия, кто сказал, что будет легко") if n == 1: print("печатаем че надо этому программисту") print("задолбался я уже считать эту головоломку") print("лучше бы в Heroes III поиграли") print(n, start, finish) print("данный move закончил свой жизненный цикл","\n") else: print("первый параметр n не равен 1 ща расчитаем tmp и запихуем в finish") print("да еще и от n отнимем 1 чтобы было веселей") tmp = 6 - start - finish print("n = ",n-1) print("start = ",start) print("finish = ",tmp) check += 1 move(n - 1, start, tmp , check) print(",а это твой следующий результат, подавись") print("я его вывожу по принту, который ты в else записал") print("и посмотри где move запустился с такими параметрами") print(n, start, finish) print("что не смешно? то,то! А мне думаешь весело считать эту чупуху?") check += 1 print("теперь от n отнимем 1, чтобы тебе голову сломать") print("и в старт впихуем tmp которая, так, между прочим равна",tmp) print("и снова запустим move, так как mova то два в условии else") print("это и будет второй теперь работать, рекурсия же опять") print("n = ",n - 1) print("start = ",tmp) print("finish = ",finish) move(n - 1, tmp, finish, check) check = 1 move(n, start, finish, check)
Отредактировано m1r42 (Ноя. 10, 2022 13:39:00)
Офлайн
Спасибо за нетоксичный ответ.
Но стало еще сложнее, пытаюсь теперь из объяснения удалить лишние шутки и оставить обьяснение, чтобы начать разбираться
m1r42
Держи, дружище, программа веселей если с шутками. А вообще забавная головоломка, мне понравилась.
Офлайн
KtulichДа, там счет не работает, вот код с рабочим счетом запусков
Но стало еще сложнее, пытаюсь теперь из объяснения удалить лишние шутки и оставить обьяснение, чтобы начать разбиратьс
n = 3 start = 1 finish = 3 def move(n, start, finish): global check check += 1 print("запустился move c параметрами",n,start,finish) print("номер запуска move на всякий случай чтобы ты голову не сломал ",check) print("у нас же все таки рекурсия, кто сказал, что будет легко") if n == 1: print("печатаем че надо этому программисту") print("задолбался я уже считать эту головоломку") print("лучше бы в Heroes III поиграли") print(n, start, finish) print("данный move закончил свой жизненный цикл","\n") else: print("первый параметр n не равен 1 ща расчитаем tmp и запихуем в finish") print("да еще и от n отнимем 1 чтобы было веселей") tmp = 6 - start - finish print("n = ",n-1) print("start = ",start) print("finish = ",tmp) move(n - 1, start, tmp) print(",а это твой следующий результат, подавись") print("я его вывожу по принту, который ты в else записал") print("и посмотри где move запустился с такими параметрами") print(n, start, finish) print("что не смешно? то,то! А мне думаешь весело считать эту чупуху?") print("теперь от n отнимем 1, чтобы тебе голову сломать") print("и в старт впихуем tmp которая, так, между прочим равна",tmp) print("и снова запустим move, так как mova то два в условии else") print("это и будет второй теперь работать, рекурсия же опять") print("n = ",n - 1) print("start = ",tmp) print("finish = ",finish) move(n - 1, tmp, finish) check = 0 move(n, start, finish)
Отредактировано m1r42 (Ноя. 10, 2022 14:05:07)
Офлайн
Ktulich
4.
move(n - 1, start, tmp)
—->
move(2, 1, 2)
Но в принт это не ушло, это просто запомнила программа
5.
print(n, start, finish)
Офлайн
Установи пишарм
Запусти код в дебаггере
Там будет окошко показывать переменные все
выполняя пошагово код ты будешь видеть с какой строки на какую переходишь и чт в этот момент происходит со значениями переменных
Наглядней не придумали еще ничего
Офлайн
ZerGименно в пайчарме я и работаю
Установи пишарм Запусти код в дебаггереТам будет окошко показывать переменные всевыполняя пошагово код ты будешь видеть с какой строки на какую переходишь и чт в этот момент происходит со значениями переменныхНаглядней не придумали еще ничего
Офлайн
KtulichВот еще вариант. Меняй в этом коде n руками 2,3,4,5,6… до тех пор пока пайтон не пошлет тебя из за огромной рекурсии, шутка, хватит до 5
вот пока вникаю
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(2, 1, 1)
Отредактировано m1r42 (Ноя. 10, 2022 16:44:08)
Офлайн
Ktulich
и нет, дебаггер не помог для наглядности, переменные там меняются но наглядно непонятно почему
move(3, 1, 3) def move(n, start, finish): # n=3, start=1, finish=3 if n == 1:# False print(n, start, finish)# пропускаем else: tmp = 6 - start - finish # 6 - 1 - 3 = 2 move(n - 1, start, tmp) # выполняем move(3-1, 1, 2) = move(2, 1, 2) точка возврата 1 print(n, start, finish)# дальше не выплнится пока не закончит работу выше вызванная функция move(n - 1, tmp, finish)# -//-//-// #VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV def move(n, start, finish): # n=2, start=1, finish=2 | move(2, 1, 2) if n == 1:# False print(n, start, finish)# пропускаем else: tmp = 6 - start - finish # 6 - 1 - 2 = 3 move(n - 1, start, tmp) # выполняем move(2-1, 1, 2) = move(1, 1, 3) точка возврата 2 print(n, start, finish)# дальше не выплнится пока не закончит работу выше вызванная функция move(n - 1, tmp, finish)# -//-//-// #VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV def move(n, start, finish): # n=1, start=1, finish=3 if n == 1:# True print(n, start, finish)# выводим на экран 1,1,3 else: # дальше не выполняется tmp = 6 - start - finish move(n - 1, start, tmp) print(n, start, finish) move(n - 1, tmp, finish) # функция закончила работу курсор возвращается к точке возврата 2 для удобства написал ее снова ниже #VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV def move(n, start, finish): # n=2, start=1, finish=2 | move(2, 1, 2) if n == 1:# False print(n, start, finish)# пропускаем else: tmp = 6 - start - finish # 6 - 1 - 2 = 3 move(n - 1, start, tmp) # выполняем move(2-1, 1, 2) = move(1, 1, 3) точка возврата 2>функция move(1,1,3) закончилась print(n, start, finish)# выводим на экран n=2, start=1, finish=2 = 2,1,2 move(n - 1, tmp, finish)# выполняем move(2-1, 3, 2) = move(1, 3, 2) точка возврата 3 #VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV def move(n, start, finish): # n=1, start=3, finish=2 | move(1, 3, 2) if n == 1:# True print(n, start, finish)# выводим на экран 1, 3, 2 else: # дальше не выполняем tmp = 6 - start - finish move(n - 1, start, tmp) print(n, start, finish) move(n - 1, tmp, finish) # функция закончила работу курсор возвращается к точке возврата 3 для удобства написал ее снова ниже #VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV def move(n, start, finish): # n=2, start=1, finish=2 | move(2, 1, 2) if n == 1:# False print(n, start, finish)# пропускаем else: tmp = 6 - start - finish # 6 - 1 - 2 = 3 move(n - 1, start, tmp) # выполняем move(2-1, 1, 2) = move(1, 1, 3) точка возврата 2>функция move(1,1,3) закончилась print(n, start, finish)# выводим на экран n=2, start=1, finish=2 = 2,1,2 move(n - 1, tmp, finish)# выполняем move(2-1, 3, 2) = move(1, 3, 2) точка возврата 3 функция move(1,3,2) закончилась # функция закончила работу курсор возвращается к точке возврата 1 для удобства написал ее снова ниже # VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV def move(n, start, finish): # n=3, start=1, finish=3 if n == 1:# False print(n, start, finish)# пропускаем else: tmp = 6 - start - finish # 6 - 1 - 3 = 2 move(n - 1, start, tmp) # выполняем move(3-1, 1, 2) = move(2, 1, 2) точка возврата 1> move(2,1,2) закончилась print(n, start, finish)# выводим на экран 3, 1, 3 move(n - 1, tmp, finish)# выполняем move(2, 2, 3)
Офлайн
xam1816к черту компьютер, мы руками умеем
как вам такое Илон Маск
(1) результат 1
/
(2) - выводит саму себя 2
/ \
/ (1) рузультат 3
/
(3) выводит саму себя 4
\
\ (1) результат 5
\ /
(2) выводит саму себя 6
\
(1) результат 7
Отредактировано m1r42 (Ноя. 10, 2022 17:37:55)
Офлайн
xam1816а как мы дальше то идем?
твоя ошибка в том что ты думаешь что 5 - это вывод информации, а он не наступит, потому что четвертым ты вызвал функцию move с новыми аргументами, курсор интерперетатора перешел в начало этой функции
Отредактировано Ktulich (Ноя. 10, 2022 18:54:30)
Прикреплённый файлы:
2022-11-10_21-47-46.png (93,3 KБ)
Офлайн