Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Паскаль_2.doc
Скачиваний:
6
Добавлен:
08.11.2018
Размер:
324.61 Кб
Скачать

Стеки для локальных переменных и параметров

Stack - груда, куча, кипа, стопка (перевод с англ.) Структура данных-сравнение со стопкой тарелок. Когда имеет место очередной вызов такой рекурсивной процедуры, значение параметра, ассоциированное с этим вызовом, помещается на верх стека значений. При этом новая ячейка памяти (для следующего значения), содержимое которой изначально не определенно, присоединяется к стеку поверх только что занесенного туда значения. Например, если имеет место обращение к значению N или next в процедуре Reverse, то используется соответствующее значение с верха стека. Если же имеет место рекурсивный возврат, значение, находящееся в данный момент на верху стека, удаляется и следующее значение перемещается на верх стека.

Состояние стеков при вызовах процедуры Reverse

После первого вызова процедуры Reverse

N

next

3

?

Непосредственно перед вторым вызовом процедуры Reverse буква а считывается в стек next

N

next

3

A

После второго вызова Reverse

N

next

2

?

3

a

Непосредственно перед третьим вызовом процедуры Reverse буква b считывается в стек next

N

next

2

b

3

a

После третьего вызова Reverse

N

next

1

?

2

b

3

a

В ходе выполнения процедуры в стеке next считывается c и тут же печатается, так как N в этот момент имеет значение 1(конечный шаг).

N

next

1

c

2

b

3

a

При рекурсивном возврате значения на верху стека удаляются

После первого возврата

N

Next

2

b

3

a

Управление возвращается оператору write, осуществляющему вывод значения b, находящегося в этот момент на верху стека next.

После второго возврата

N

Next

3

a

Управление передается оператору write, при осуществляется вывод значения c, находящегося на верху стека next.

После третьего возврата:

N

Next

?

?

В Паскале эти действия выполняется автоматически.