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

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

Моделирование ЭВМ на GPSS (три класса заданий) + Пояснительная записка
Моделирование интернет кафе на 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 Комментариев · 14252 Прочтений · Для печати

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


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

Случайные загрузки
FormShape [Исходн...
XPButtons
Разработка распре...
Atb
Visual Basic Script
Создание меню на ...
Delphi Быстрый Ст...
Delphi 2005 Учимс...
DateEdit
Секреты программи...
Библия хакера 2 К...
Самоучитель C++
Синтаксический ан...
WAP версия сайта
RbControls
Java 2. Наиболее ...
DemoEdit [Исходни...
Панель случайной ...
3d Tank [Исходник...
ActiveX в Delphi

Топ загрузок
Приложение Клие... 100774
Delphi 7 Enterp... 97839
Converter AMR<-... 20268
GPSS World Stud... 17014
Borland C++Buil... 14193
Borland Delphi ... 10293
Turbo Pascal fo... 7374
Калькулятор [Ис... 5984
Visual Studio 2... 5207
Microsoft SQL S... 3661
Случайные статьи
Настройки почтовог...
Бесплатная раскрут...
Разобрать список н...
Страница, имеющая ...
ДЫРЯВЫЕ АБСТРАКЦИИ
создавать учетные ...
Прячем программу д...
Toning the legs an...
TopServer
Программа преобраз...
Исключения в списк...
Parimatch фрибет
КРАТКИЙ ОБЗОР КОСМ...
Как играть в казин...
Sol казино
Программирование а...
Метод повторного х...
химические реактив...
Структура программы
Электронные счетны...
ins будет считыват...
Внешняя сортировка...
Объединение данных...
Выбор параметра в ...
Дополнение n-й бит...
Статистика



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


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