Cтраница 2
Для иллюстрации рекурсии часто используется задача вычисления факториала. Пусть предикаты факториал ( и, v), вычесть ( и, v, w) и умножить ( и, v, w) означают, что и и, и - v w и u v w соответственно. Процедура F1, которая завершает рекурсивный процесс, называется обычно базисной процедурой. [16]
КлассическимЗпримером использования рекурсивной процедуры-функции является процедура вычисления факториала, например. [17]
Если устранить хвостовую рекурсию, переписать функции вычисления факториала, МОД и BigAdd достаточно просто. [18]
Фундаментальное различие между формулировками методом сверху вниз задачи вычисления факториала ( программа 5) и задачи нахождения собственного вектора ( программа 9) заключается в том, что одна из них является детерминированной, а другая - недетерминированной. Во второй программе каждый активированный вызов прибл может обратиться к любой из двух процедур прибл, что приводит к очень разветвленному дереву поиска, многие тупиковые ветви которого содержат многократно дублируемые цепочки ( дорогостоящих) умножений матрицы на вектор. В первом же случае исполнение программы оказывается детерминированным вплоть до момента вычисления решения. [19]
В качестве примера использования циклов в Object Pascal рассмотрим задачу вычисления факториала некоторого натурального числа. Алгоритм решения данной задачи читателю уже известен на примере Turbo Pascal. Как читатель, конечно, помнит, в данном случае для нахождения искомой величины удобнее всего использовать цикл с заранее известным числом повторений. [20]
Здесь внутри цикла, перебирающего члены ряда, содержится другой цикл вычисления факториала, который выполняется ( 2п 1) раз при каждом n - м выполнении внешнего цикла. [21]
В этой формуле 3 раза встречается одна и та же функциональная зависимость - вычисление факториала. [22]
Рассмотрим циклический алгоритм типа пока ( рис. 1.2, в) на примере алгоритма вычисления факториала. N - число, факториал которого вычисляется. Цикл будет выполняться, пока справедливо условие N D К. [23]
В последующем параграфе мы увидим, что метод рекурсивного программирования - не лучший способ вычисления факториала. Это пример ситуации, в которой задачу можно, но не следует решать рекурсивно. [24]
Для того чтобы было понятно, как работает данная функция, рассмотрим в начале алгоритм вычисления факториала. [25]
![]() |
Графический интерфейс программы Факториал. [26] |
Далее нужно написать код, описывающий реакцию на нажатие экранной кнопки Ввод, которое должно приводить к вычислению факториала с отображением его в соответствующем текстовом окне. Подпрограмма, описывающая данную реакцию, должна содержать описание используемых переменных ( ранее мы рассматривали, какие переменные здесь необходимы), а также, как уже говорилось, средства ввода данных и вывода результатов. [27]
Проще всего допустить эту ошибку, если не указать условие установки, как это сделано в следующей ошибочной версии функции вычисления факториала. Поскольку функция не проверяет, достигнуто ли условие остановки рекурсии, она будет бесконечно вызывать саму себя. [28]
Программа циклического процесса, описанного с помощью условного оператора и операторов присваивания и перехода, была рассмотрена в § 1.2 при вычислении факториалов. [29]
![]() |
Примеры работы программы вычисления факториала. [30] |