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

Содержимое удалено Содержимое добавлено
м <source> -> <syntaxhighlight> (phab:T237267)
 
Строка 3:
==Понятие о рекурсии==
Рекурсия это такая рекурсия, которая в рекурсии подразумевает рекурсию, которая продолжает вызывать рекурсию, которая... Рекурсия -- это обращение к себе. Причём, это обращение может быть настолько многоуровневым, что смотря на самую дальнюю точку -- просто не видишь её конец. Очень не плохо показана идея рекурсии в фильме "[[w:Начало (фильм, 2010)|Начало]]" с Леонардо Ди Каприо. Если вы его не могли посмотреть, то ещё можно понять что такое рекурсия из детского не очень доброго стишка, но, возможно, как любят говорить киношники -- "основанного на реальных событиях":
<sourcesyntaxhighlight lang="dos">
У попа была собака. Он её любил.
Она съела кусок мяса -- он её убил.
Строка 11:
В землю закопал и на могиле написал:
У попа была собака....
</syntaxhighlight>
</source>
И так до бесконечности. Несчастная собака... Несчастный поп...
 
Строка 20:
 
Hello11.odc
<sourcesyntaxhighlight lang="oberon2">
MODULE TestHello11;
(* это программа на языке
Строка 55:
BEGIN
END TestHello11.
</syntaxhighlight>
</source>
Обратите внимание, что в этом примере можно было использовать только одну переменную для вычисления факториала, если бы вывод в "Log.Int(f)" выполнялся через вызов "Log.Int(GetFactorial(n))". Соответственно, строку выше можно было бы удалить и отказаться от объявления переменной "f".
 
Вывод программы представлен ниже:
<sourcesyntaxhighlight lang="dos">
компилируется "TestHello11" 220 0
Введите основание факториала:
Строка 70:
Достигнуто дно
f( 6) = 720
</syntaxhighlight>
</source>
Как видно из вывода переменная "n" с каждым вызовом действительно уменьшалась на "1", и это была настоящая рекурсия. )