![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Почему рекурсивная процедура Паскаля не попадает в бесконечный цикл и почему она правильно использует следующий символ в каждом рекурсивном вызовеDelphi , Синтаксис , ЦиклыРекурсивная процедура Паскаля, подобная приведенной ниже, на первый взгляд может показаться, что она попадет в бесконечный цикл, однако на самом деле она завершается корректно:
При запуске кода вызов Вопрос в том, почему процедура не попадает в бесконечный цикл при вызове Ответ на этот вопрос заключается в том, что процедура Значение, возвращаемое процедурой В коде выше процедура Допустим, вы ввели A, B, C и ., а затем нажали Enter. На этом этапе, поскольку параметр является Символ оценивается, и если он не равен '.', процедура вызывается рекурсивно. Однако в буфере остаются символы, поэтому следующий символ, 'B', считывается из буфера. То же самое происходит с 'C', а затем finally '.'. Это завершает рекурсивные вызовы и запускает обратный обход стека, который происходит в обратном порядке: C, B и A. Таким образом, процедура не попадает в бесконечный цикл и правильно использует следующий символ в каждом рекурсивном вызове, благодаря тому, что она считывает символы из буфера, а не запрашивает их у пользователя при каждом рекурсивном вызове. Описывается особенность работы рекурсивной процедуры Паскаля, которая считывает символы из стандартного ввода и обрабатывает их не запрашивая у пользователя при каждом рекурсивном вызове, а используя буфер, что предотвращает попадание в бесконеч Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |