Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 17
На сайте нет зарегистрированных пользователей

Пользователей: 13,372
новичок: vausoz
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Расчет размера дохода на одного человека в Turbo Pascal
Создание последовательности окон и передвижение окон по экрану на Turbo ...
Моделирование работы крупного аэропорта на GPSS + Пояснительная записка

Рекурсивное вычисление факториалов
Факториал числа N записывается как N! (читается N факториал). Значение О!
равно 1. Остальные значения определяются следующим образом:
N! = N * (N - 1) * (N - 2) * ... * 2 * 1



В табл. 5.1 приведены первые 10 значений функции факториала.
Таблица 5.1. Значения функции факториала

Функцию факториала можно определять с помощью рекурсии:
О! = 1
N! = N * (N - 1)!, для N > 0.



Преобразовать это определение в рекурсивную функцию очень просто:
function Factorial(num : Integer) : Integer;
begin
if (num<=0) then
Factorial := 1
else
Factorial := num*Factorial(num-1);
end;



Функция сначала проверяет число на условие N < 0. Для чисел меньше 0 фак-
ториал не определен, но это условие проверяется для подстраховки. Если бы функ-
ция проверила только условие равенства числа нулю, то для отрицательных чисел
рекурсия была бы бесконечной.
Если входное значение меньше или равно 0, функция возвращает значение 1.
В противном случае значение функции равно произведению входного значения на
факториал от входного значения, уменьшенного на единицу.
Существуют два фактора, которые гарантируют, что эта рекурсивная функция
в конце концов остановится. Во-первых, при каждом последующем вызове значе-
ние параметра num уменьшается на единицу. Во-вторых, значение num ограничено
нулем. Когда значение доститет 0, функция заканчивает рекурсию. Такое усло-
вие, как num < 0, которое останавливает рекурсию, называется основным условием
или условием остановки (base Ease или stopping case).
При каждом вызове подпрограммы система сохраняет некоторые значения
в стеке, как описывалось в главе 3. Поскольку этот стек имеет очень важное значе-
ние, иногда его называют просто стеком. Если рекурсивная процедура вызывает-
ся много раз, она может заполнить весь стек и вызвать ошибку переполнения сте-
ка (Out of stack space).
Количество вызовов рекурсивной функции зависит от объема памяти компь-
ютера и количества данных, которые программа помещает в стек. В Delphi под-
программа обычно может вызывываться много раз перед тем, как возникнет ошибка
переполнения стека. В одном тестов программа исчерпала стековое простран-
ство только после 2356 рекурсивных вызовов.
Опубликовал Kest October 19 2009 11:28:52 · 2 Комментариев · 14624 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Анонимус December 01 2010 08:15:07
Ага, и эта процедура досчитает до 12! а потом начнет ересь выдавать, так как происходит переполнение типа Integer. Int64 правильно работает до 20! включительно. И уж совсем распоследнее - unsigned int64. Но и его не надолго хватает. Так что не знаю о каких 2365 рекурсиях идёт речь в статье - переполнение произойдёт значительно раньше.
Анонимус December 01 2010 08:25:48
И вообще! В заголовке написано делфи, поэтому нечего брать условия в скобки. И в делфях нет unsigned int64!
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
TrayIcon
IMtale
С# для профессион...
Игра "Астероиды" ...
Самоучитель PHP 4
Strawberry Prolog...
Пример работы с р...
Самоучитель C++
TMS
DateEdit
Turbo Pascal for ...
Delphi 2005 Учимс...
Защита от спама ...
Fig [Исходник на ...
MpegPlay
C# Учебный курс
С. Г. Горнаков - ...
Delphi. Готовые а...
EMS QuickExport S...
Handles

Топ загрузок
Приложение Клие... 100793
Delphi 7 Enterp... 98018
Converter AMR<-... 20298
GPSS World Stud... 17059
Borland C++Buil... 14239
Borland Delphi ... 10374
Turbo Pascal fo... 7390
Калькулятор [Ис... 6080
Visual Studio 2... 5228
Microsoft SQL S... 3674
Случайные статьи
а: определение эфф...
ввод строки произв...
Построение дерева ...
Программист
есть ли фильтр гру...
Читателям первого ...
Выделение фрагмент...
Циклы. Программа р...
Файлы в папке Wind...
Сжатие данных
12.3. Пространство...
Как выбирать вирту...
(When Possible)
Подпрограмма Input...
мало для подчиненн...
Оценка рисков безо...
Азартный гемблинг ...
графические типы д...
16.10.
стр. 688 Ответы на...
Открытие файла
Метафора
Продвижение сайта SEO
Автоматическая пер...
Простейшие алгорит...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?