Составители:
Рубрика:
4
система уже не может создать очередного экземпляра локальных
объектов функции, что ведет, как правило, к аварийному завершению
программы.
Рекурсивные вызовы разделяют на прямые и косвенные. При
прямой рекурсии функция вызывает сама себя по следующему шаблону:
void func()
{
…
func();
…
}
При использовании косвенной рекурсии вызов осуществляется
опосредованно, через вызов другой функции:
void func1()
{
…
func(); //вызываем стороннюю функцию
…
}
int func()
{
…
func1(); //рекурсивно вызывается func1
…
}
В последнем примере, очевидно, косвенно вызываются как
функция func(), так и функция func().
Чтобы глубина рекурсии не была бесконечной, рекурсивный вызов
всегда подразумевает условие окончания (продолжения) рекурсии.
Поэтому рекурсивный вызов (как прямой, так и приводящий к
косвенному возврату) должен быть обусловлен:
void func()
{
…
if (условие_продолжения_рекурсии)
func();
…
}
Рекурсивный вызов по своему функциональному назначению близок
циклическому процессу: и в том и в другом многократно повторяются
некоторые действия. В некоторых языках программирования (например, в
функциональных) нет операторов цикла, их заменяет рекурсия.
Вернемся к рекурсивному определению алгоритма вычисления
факториала целого числа. Функция рекурсивного вычисления факториала
может быть такой:
unsigned int fact (unsigned int n)
система уже не может создать очередного экземпляра локальных объектов функции, что ведет, как правило, к аварийному завершению программы. Рекурсивные вызовы разделяют на прямые и косвенные. При прямой рекурсии функция вызывает сама себя по следующему шаблону: void func() { … func(); … } При использовании косвенной рекурсии вызов осуществляется опосредованно, через вызов другой функции: void func1() { … func(); //вызываем стороннюю функцию … } int func() { … func1(); //рекурсивно вызывается func1 … } В последнем примере, очевидно, косвенно вызываются как функция func(), так и функция func(). Чтобы глубина рекурсии не была бесконечной, рекурсивный вызов всегда подразумевает условие окончания (продолжения) рекурсии. Поэтому рекурсивный вызов (как прямой, так и приводящий к косвенному возврату) должен быть обусловлен: void func() { … if (условие_продолжения_рекурсии) func(); … } Рекурсивный вызов по своему функциональному назначению близок циклическому процессу: и в том и в другом многократно повторяются некоторые действия. В некоторых языках программирования (например, в функциональных) нет операторов цикла, их заменяет рекурсия. Вернемся к рекурсивному определению алгоритма вычисления факториала целого числа. Функция рекурсивного вычисления факториала может быть такой: unsigned int fact (unsigned int n) 4
Страницы
- « первая
- ‹ предыдущая
- …
- 2
- 3
- 4
- 5
- 6
- …
- следующая ›
- последняя »