Какой термин для «двойной рекурсии»? - PullRequest
13 голосов
/ 03 января 2011

Вот явно рекурсивная функция:

function()
{
    function();
}

Мы бы просто назвали это "рекурсивным", но как насчет этой (едва ли) более сложной версии?

functionLeft()
{
    functionRight();
}

functionRight()
{
    functionLeft();
}

Есть ли термин для этого сценария, например, "двойная рекурсия"? Или нет конкретного термина, отличающего этот случай от описанного выше случая с одной функцией?

Ответы [ 3 ]

27 голосов
/ 03 января 2011

Это называется взаимная рекурсия .

16 голосов
/ 03 января 2011

Как сказал Джон Пурди, приведенный вами пример называется "взаимной рекурсией". Термин «двойная рекурсия» также существует, но имеет другое значение: для случая, когда функция использует два рекурсивных вызова. Классическим примером является функция Фибоначчи "

int Fib(int n)
{
  if (n < 2) return 1;
  return Fib(n-1) + Fib(n-2);
}

Функция Fib (n) рекурсивно вызывает себя дважды.

1 голос
/ 17 июля 2012

Одной из взаимосвязей двойной рекурсии может быть разделить и победить (например) быстрая сортировка

quicksort = quicksort smaller ++ pivot ++ quicksort larger
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...