ВУЗ:
Составители:
Рубрика:
. Практикум по курсу «Алгоритмизация и программирование». Часть 2
printf("Введите n:");
while(true)
{
scanf("%d",&n);
if(n<0)
printf("Введите положительное число.\n");
else break;
}
long int k=Factorial(n);// первый вызов функции
if(k>0)
printf("%d!=%d\n",n,k);
}
// определение функции вычисления факториала
long int Factorial(int n)
{
// для отрицательных чисел факториал не определен
if(n<0) return -1;
// условие выхода из рекурсии
if(n==1 || n==0)
return 1;
return n*Factorial(n-1);// рекурсивный вызов
}
На примере решения этой задачи рассмотрим, каким образом выполняет-
ся рекурсивный вызов функции. Допустим, пользователь ввел значение пере-
менной n, равное 4.
Главная функция содержит вызов функции Factorial(4). Для выпол-
нения вызова функции в оперативной памяти выделяется некоторая область,
необходимая для запоминания адреса возврата, создания копий параметров и
копий локальных переменных.
Свободная область памяти в момент первого вызова Factorial(4) на
рис. 2.1 изображена в виде пустого прямоугольника. Внутри прямоугольника
показано значение параметра n.
Вычисление факториала в функции Factorial(4) начинается с про-
верки условия выхода из рекурсии (n==1 или n==0). Так как оно не выпол-
няется, происходит второй вызов Factorial(3), который является первым
рекурсивным вызовом функции. Для второго вызова также выделяется неко-
торое количество памяти (рис. 2.2).
39
. Практикум по курсу «Алгоритмизация и программирование». Часть 2
printf("Введите n:");
while(true)
{
scanf("%d",&n);
if(n<0)
printf("Введите положительное число.\n");
else break;
}
long int k=Factorial(n);// первый вызов функции
if(k>0)
printf("%d!=%d\n",n,k);
}
// определение функции вычисления факториала
long int Factorial(int n)
{
// для отрицательных чисел факториал не определен
if(n<0) return -1;
// условие выхода из рекурсии
if(n==1 || n==0)
return 1;
return n*Factorial(n-1);// рекурсивный вызов
}
На примере решения этой задачи рассмотрим, каким образом выполняет-
ся рекурсивный вызов функции. Допустим, пользователь ввел значение пере-
менной n, равное 4.
Главная функция содержит вызов функции Factorial(4). Для выпол-
нения вызова функции в оперативной памяти выделяется некоторая область,
необходимая для запоминания адреса возврата, создания копий параметров и
копий локальных переменных.
Свободная область памяти в момент первого вызова Factorial(4) на
рис. 2.1 изображена в виде пустого прямоугольника. Внутри прямоугольника
показано значение параметра n.
Вычисление факториала в функции Factorial(4) начинается с про-
верки условия выхода из рекурсии (n==1 или n==0). Так как оно не выпол-
няется, происходит второй вызов Factorial(3), который является первым
рекурсивным вызовом функции. Для второго вызова также выделяется неко-
торое количество памяти (рис. 2.2).
39
Страницы
- « первая
- ‹ предыдущая
- …
- 37
- 38
- 39
- 40
- 41
- …
- следующая ›
- последняя »
