Cтраница 1
Рекурсивная подпрограмма может вызывать сама себя. Для обеспечения этого необходим механизм слежения за глубиной вложенности вызовов подпрограммы и за тем, куда производится возврат при каждом вызове. [1]
Выполнение рекурсивных подпрограмм требует уч та того, что она содержит обрацэния к семой cede. Поэтому каждому новому обращении к такой подпрограмме должны соответсг лвать свой набор рабочих регистров и свое ио о в памяти для запоминания адреса возврата. [2]
Ниже приведена рекурсивная подпрограмма для обработки данных, имеющих структуру в виде двоичного дерева. [3]
При создании рекурсивной подпрограммы необходимо построить ее алгоритм так, чтобы выход из нее гарантировался. [4]
При наличии рекурсивных подпрограмм для обеих конструкций необходимо, чтобы метки во время выполнения изображались парой, составленной из адреса соответствующей машинной команды и указателя на активационную запись. Эти сложности будут подробно рассмотрены в гл. Алгола; таким образом, необходимо перейти к частичному программному моделированию структуры меток и инструкций перехода goto во время выполнения программы. [5]
При написании рекурсивных подпрограмм необходимо сосредоточить внимание нз том, чтобь: избежать бесконечной рекурсии. В некоторой точке вызов должен быть прекращен, и должна быть предусмотрена альтернативная ветвь. В приведенной выше подпрограмме это происходит тогда, когда число N больше либо равно единице. В этой точке результату присваивается значение единицы, и рекурсия исчерпывается. [6]
У каждой активации рекурсивной подпрограммы должна быть своя собственная локальная среда. Если, например, X - локальная переменная в Р и Р рекурсивно вызывает себя, то мы ожидаем, что в каждой активации Р будет новая локальная переменная с именем X. Это означает создание новой локальной среды при каждом вызове. Из тех же соображений следует, что, когда Р возвращает управление, ее локальная среда должна быть уничтожена. Возможен также метод с сохранением локальной среды между вызовами. Здесь под сохранением понимается создание единой локальной среды, используемой всеми активациями данной подпрограммы. [7]
При каждом вызове рекурсивной подпрограммы создается новый набор локальных объектов подпрограммы. Исключением являются объекты, имеющие атрибут SAVE, и объекты, начальное значение которых задается оператором DATA. Объекты, инициализируемые в подпрограммах, получают атрибут SAVE автоматически, а оператор DATA при рекурсивном вызове выполняется только один раз. [8]
Нелокальные ссылки в рекурсивных подпрограммах не вызывают никаких особых проблем при любом из трех подходов к нелокальным средам. Каждый подход немедленно распространяется на случай рекурсии. При явно описываемой нелокальной среде X является глобальным и, следовательно, существует только в одной активации. В методе статической блочной структуры при обработке ссылки на X ассоциация для X будет выбираться из наиболее поздней активации подпрограммы, в которой описан X. В методе последней ассоциации нужная ассоциация будет, конечно, выбираться из последней активации в цепи вызовов. [9]
Магазин предназначен для организации работы рекурсивных подпрограмм. [10]
В частном случае все переменные рекурсивной подпрограммы могут размещаться в ее собственных регистрах. Тогда при входе достаточно размножать лишь область сохранения. Эту задачу автоматически решает макрокоманда PROC без параметров или с ключевым параметром ТМ NO. В последнем случае участок в 18 слов динамически резервируется заново при каждом входе в подпрограмму. Если там обнаружен код, содержащий нули не во всех своих позициях, то новая область не резервируется, а в регистр 13 заносится адрес из третьего слова предыдущей области. При таком способе выделение нового участка в 18 слов происходит столько раз, какова максимальная глубина рекурсии. Например, рассматриваемая ниже подпрограмма НТ при п 10 вызывается 1023 раза, а выделение нового участка происходит всего 10 раз. [11]
Опять мы имеем дело с очень простой рекурсивной подпрограммой; эта простота является, разумеется, следствием рекурсивной структуры, выбранной нами для представления выражений. [12]
Как влияют на выбор среды ссылок рекурсивные подпрограммы. В любой момент выполнения у рекурсивной подпрограммы может быть много одновременно существующих активаций. Среды ссылок в различных активациях одной подпрограммы могут в общем случае отличаться друг от друга. Таким образом, перед нами стоит задача определения среды ссылок для каждой активации подпрограммы. [13]
Мы можем достичь этой цели, написав рекурсивную подпрограмму под названием COMPILE, результатом выполнения которой является компиляция одного оператора. [14]
Вышеперечисленные шаги 1 и 3 формируют базовые части двух рекурсивных подпрограмм P1TURN и P2TURN, которые вызывают друг друга. Подпрограммы анализа игры Г41М представлены на языке ассемблера ЭВМ 6809 и приведены на рис. 9.22. Входные и выходные параметры передаются с использованием регистров, а локальные переменные по-мещаютгя в стек в начале каждой подпрограммы и осстанав-ливаютгч по завершении работы подпрограммы. [15]