Компонентный Паскаль/Рекурсия на примере факториала: различия между версиями

Содержимое удалено Содержимое добавлено
Строка 17:
 
== Вычисление факториала ==
Для расчёта факториала можно пойти родственным путём, что и в прошлом примере, но рекурсивным он уже не будет<ref name="эфф">Вообще, вычисление в настоящем случае факториала через рекурсию -- довольно неэффективный алгоритм. Надо стараться искать обходные пути. Вообще с рекурсией надо быть очень внимательным, так как неограниченная рекурсия мгновенно вызовет [[w:Переполнение стека|переполнение стека]]. На этом принципе работают чуть ли не половина вирусов для MS Windows. Можно отдельно почитать статью с множеством технических подробностей на [[http://www.codenet.ru/progr/asm/overflow.php codenet.ru]].</ref>. В КП рекурсия разрешена и выполняется процедурой при вызове самой себя (прямо или косвенно). Важно понимать, что серия рекурсивных вызовов никогда не закончится, если не установить ограничитель. При вычислении факториала таким ограничителем служит число, по отношению к которому вычисляется факториал. Очень важно помнить, что факториал растёт чудовищно быстро, и чтобы избежать ошибки переполнения, это число не должно быть большим. Ниже, пример рекурсивного вычисления факториала на КП.
 
Hello11.odc
<source lang="oberon2">
 
</source>
 
== Примечания ==