Навигация
Главная
Поиск
Форум
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
Реклама
Сейчас на сайте
Гостей: 8
На сайте нет зарегистрированных пользователей

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

Обратное размещение элементов ЭВС на Delphi + Пояснительная записка
Расчет размера дохода на одного человека в Turbo Pascal
Моделирование процесса обработки заданий пакетным режимом работы с квант...

Рекурсивное вычисление факториалов
Факториал числа 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 Комментариев · 14250 Прочтений · Для печати

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


Комментарии
Анонимус 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...
Шаблон для новост...

Случайные загрузки
Задача о 8ми ладьях
Простой текстовый...
RxLIB
Battle.Net - мони...
Книга по Delphi (...
VksButton
DateEdit
PHP в примерах
Экспорт базы данн...
Разработка интерн...
Flud Vkontakte.ru
Adapter (пример D...
MicroGPSS Studen ...
Indy in Depth Глу...
FileFind
IpEditAdress
IMtale
Рисование PopupMenu
Андрей Боровский....
Дарахвелидзе П., ...

Топ загрузок
Приложение Клие... 100774
Delphi 7 Enterp... 97838
Converter AMR<-... 20268
GPSS World Stud... 17014
Borland C++Buil... 14192
Borland Delphi ... 10292
Turbo Pascal fo... 7374
Калькулятор [Ис... 5984
Visual Studio 2... 5207
Microsoft SQL S... 3661
Случайные статьи
Системные вызовы и...
Плотность изображе...
Блейд-серверы DELL...
Аналоговые и цифро...
Выделение строк та...
Проектирование гра...
Работа с фильтрами...
Эксперименты с при...
ГЛАВА 8. ОТЛАДКА ...
Установка WordPress
Назначение и особе...
Обсуждение структу...
Аварийное восстано...
Игровой клуб казин...
Применение стилей ...
Базовые элементы и...
Евровидение 2017
Алгоритмы обхода б...
Перспективы свопинга
Порядок теорем
Предварительная по...
7.4. Справочник ...
В качестве операци...
Работа с модулями ...
Оператор Repeat; W...
Статистика



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


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