Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Пример 3. Пример 4. Вычислить сумму элементов линейного массива.
Пример 4. Вычислить сумму элементов линейного массива. При решении задачи используем следующее соображение: сумма равна нулю, если количество элементов равно нулю, и сумме всех предыдущих элементов плюс последний, если количество элементов не равно нулю.
Пример 5. Определить, является ли заданная строка палиндромом, т.е. читается одинаково слева направо и справа налево. Идея решения заключается в просмотре строки одновременно слева направо и справа налево и сравнении соответствующих символов. Если в какой-то момент символы не совпадают, делается вывод о том, что строка не является палиндромом, если же удается достичь середины строки и при этом все соответствующие символы совпали, то строка является палиндромом. Граничное условие — строка является палиндромом, если она пустая или состоит из одного символа.
Задание. Используя аналогичный подход, определите, является ли заданное натуральное число палиндромом. Подводя итог, заметим, что использование рекурсии является красивым приёмом программирования. В то же время в большинстве практических задач этот приём неэффективен с точки зрения расходования таких ресурсов ЭВМ, как память и время исполнения программы. Использование рекурсии увеличивает время исполнения программы и зачастую требует значительного объёма памяти для хранения копий подпрограммы на рекурсивном спуске. Поэтому на практике разумно заменять рекурсивные алгоритмы на итеративные.
Контрольные вопросы и задания 1. Какое определение называется рекурсивным? Приведите собственные примеры рекурсивных определений. 2. Какой вспомогательный алгоритм (подпрограмма) называются рекурсивными? Приведите собственные примеры содержательных задач, где для решения может быть использован рекурсивный вспомогательный алгоритм. 3. Что такое граничное условие, и каково его назначение в рекурсивной подпрограмме? 4. Что такое рекурсивный спуск? 5. Что такое рекурсивный подъём? 6. Что такое глубина рекурсии? Чему равна глубина рекурсии в приведённых выше примерах? 7. На каком этапе выполнения рекурсивной подпрограммы могут выполняться её операторы? 8. Почему приведённый ниже алгоритм посимвольного формирования строки завершится аварийно? 9.Function Stroka: String; 10. Var C: Char; 11. Begin 12. Write('Введите очередной символ: '); ReadLn(C); 13. Stroka: =Stroka+C 14. End; На каком этапе выполняются действия в этом алгоритме?
|