Python

Как вы поняли рекурсию?

Вот как это понять? Выглядит, как бред.
 F(4): {n = 4}
F(n - 1): {n = 3}
F(n - 1): {n = 2}
F(n - 1): {n = 1}
F(n - 1): {n = 0}
{возврат}
write(n) {1}
F(n - 2): {n = -1}
{возврат}
{возврат}
write(n) {2}
F(n - 2): {n = 0}
{возврат}
{возврат}
write(n) {3}
F(n - 2): {n = 1}
F(n - 1): {n = 0}
{возврат}
write(n) {1}
F(n - 2): {n = -1}
{возврат}
{возврат}
{возврат}
write(n) {4}
F(n - 2): {n = 2}
F(n - 1): {n = 1}
F(n - 1): {n = 0}
{возврат}
write(n) {1}
F(n - 2): {n = -1}
{возврат}
{возврат}
write(n) {2}
F(n - 2): {n = 0}
{возврат}
{возврат}
{возврат}
В нормальном Pascal не существует процедуры print.
K.
Kaban .
81 303
Лучший ответ
Роман Михайличенко Я почти это понял, но всё равно это не может уложиться в голове. Я прям удивлён, вам даже не лень было это расписывать.
Александр Рудь В паре мест просочилось F(n = 1) вместо F(n - 1)
Процедура вызывает себя, что тут непонятного?
Видел когда-нибудь вложенные друг в друга матрёшки?
Напиши рядом процедуру G с таким же параметром и таким же кодом внутри и вызывай её из F, так будет понятнее. При вызове процедуры из самой себя создаётся полная копия контекста исполнения, как если бы ты вызвал другую процедуру. Её переменная n - это другая переменная, не та же самая, что у вызывающей процедуры. Потом управление возвращается в ту точку, из которой ты вызвал, и в тот контекст, который был на момент вызова.
Вообще, изучение математики помогает в понимании таких вещей.
Ринат Едилбаев
Ринат Едилбаев
54 053
Роман Михайличенко Да, я вроде бы понимаю принцип. Но не могу понять вакханалии с числами, которая тут происходит.