Другие языки программирования и технологии

Написать на Турбо прологе программу вычисляющую факториал заданного числа

не знаю в чём особенность турбо-пролога.

я только обычным пользуюсь.

вариантов факториала мне попадалось как минимум три.

один из них:

fact(0,1) :- !.

fact(N,F) :- N1 is N-1, fact(N1,F1), F is N*F1.

или в одну строчку

fact(N,F) :- N = 0, F is 1, !; N1 is N-1, fact(N1,F1), F is N*F1.

можно ещё приписать проверку положительности аргумента N,

на случай если кому-то ночной горшок в голову ударит

искать факториал отрицательного числа.. .
Alex Chen
Alex Chen
98 481
Лучший ответ
пролог честно говоря не знаю, но так как программирование это математика, то есть рекуррентная формула для вычисления факториала
вот тебе ссылко! http://ru.wikibooks.org/wiki/Язык_РЎРё_РІ_примерах /Факториал, может быть поможет)) Думаю на прологе логика та же самая, но синтаксис другой))
Олег Козинец
Олег Козинец
7 387
Пролог я не знаю, но алгоритм приведу:
заводишь целочисленную переменную f и заносишь в неё 1;
запускаешь цикл с счётчиком от 2 до N (N - число, факториал которого надо найти) ;
на каждом шаге цикла умножаешь f на счётчик;
после цикла в f искомый факториал.
На C:
...
int f = 1;
for (int i = 2; i <= n; i++)
f *= i;
...
Этот способ отличается скорстью. Если пользоваться реккурентной формулой, то алгоритм получается не циклический, а рекурсивный. На больших числах он работает намного медленнее (для N > 40 он работает много больше 2 секунд). Но для справки:
...
int fac(int n)
{
if (n == 1) return 1;
return fac(n - 1) * n;
}
...
f = fac(N);
...
Diman Kazakov
Diman Kazakov
438

Похожие вопросы