Язык С++ и программирование на нем. Рейзлин В.И. - 68 стр.

UptoLike

Составители: 

70
встретим ее вызова, после чего мы опять начнем выполнять ту же са-
мую функцию сначала. При этом следует отметить самое важное свой-
ство рекурсивной функции ее первый вызов еще не закончился. Чисто
внешне создается впечатление, что текст функции воспроизводится (ко-
пируется) всякий раз, когда функция сама себя вызывает. На самом деле
этот эффект воспроизводится в компьютере. Однако копируется при
этом не весь текст функции (не вся функция), а только ее части, связан-
ные с данными (формальные, фактические параметры, локальные пере-
менные и точка возврата). Алгоритм (операторы, выражения) рекурсив-
ной функции не меняется, поэтому он присутствует в памяти компью-
тера в единственном экземпляре.
Пример1. Вычислить n!
Определение факториала рекурсивно:
0!=1; n!=(n-1)!*n при n=1,2,3,
В соответствии с этим определение фкнкции, вычисляющей фак-
ториал, можно записать следующим образом;
long fact (int n){
if ( n<1 ) return 1;
else return n*fact(n-1);
}
Если, например, в main написать long result=fact(3), то последова-
тельность вызовов можно показать так:
main( )
result=fact(3)
(1) 6
fact(n =3)
return3*fact(n-1)
(2) 2
fact(n=2)
return2*fact(n-1)
(3) 1
fact(1)
return 1
Пример 2. По заданному целому числу распечатать символьную
строку цифр, изображающую это число:
void cnum(int n){int a=10;
if(n = = 0) return;