Безплатно факторно изчисление на Pascal
В повечето книги по програмиране факторна програма е показана като пример за рекурсивна функция, чийто текст изглежда доста компактен:
функция fact(n:integer):extended; започвам
if n=0 then Result:=1 else Result:=n*fact(n-1);
Нека включим тази функция в следната основна програма (списък 9.12).
Списък 9 .1 2 . Факторна програма
n: цяло число Res: върха;
четене(n); Res:=кръг(факт(n)); writeln(n,'!=',Res);
И нека се опитаме да променим типа на върнатата стойност, за да определим границата на приложимост на нашата функция за integer, comp, double, extended типове. Оказва се, че с tip=integer нашата функция правилно брои до n=12 и произвежда следното без съобщение за грешка:
Но когато контролата е деактивирана, тя дава неправилна стойност 13!=1932053504
(вместо 6227020800). А за n=17 резултатът като цяло е отрицателен (-288522240).
С tip=comp човек успява да стигне до 20!, с 21! се открива преливане. С tip=double, последният правилен резултат е за 170!. Накрая, с tip=extended се изчислява 1754!. За големи стойности на n е фиксирано аварийно спиране за всеки от горните типове връщане.
Функцията за факторно изчисление е просто заменена от обикновен цикъл, който е много по-бърз и не изисква допълнителни разходи за памет (списък 9.13).
Списък 9 .1 3 . Функция за изчисляване на факториел без рекурсия
функция fact1(n:integer):extended; вар
i: цяло число; започвам
за i:=2 до n направи Резултат:=Резултат*i;
Източник: Кетков, Ю. Л., Свободен софтуер. БЕЗПЛАТЕН PASCAL за студенти и ученици, Ю. Л. Кетков, А. Ю. Кетков. - Санкт Петербург: BHV-Петербург, 2011. - 384 с.:аз ще. + CD-ROM - (IIIKT)