2013-07-15 2 views
1

Я читал о взаимной рекурсии. Практически во всех материалах, примерами этого была проблема определить, является ли целое четным или нечетным?Практические примеры взаимной рекурсии?

int is_even(unsigned int n) 
{ 
if (n==0) return 1; 
else return(is_odd(n-1)); 
} 

int is_odd(unsigned int n) 
{ 
return (!iseven(n)); 
} 

Очевидно, что выше проблема может быть решена проще с использованием оператора модуля.

Другой пример был проблемой, чтобы выяснить, является ли человек женщиной или мужчиной. Это также можно решить проще, не используя рекурсию.

Так что это взаимная рекурсия, теоретическая или есть где-нибудь, где я могу использовать ее практически для того, чтобы сделать мое решение проще, чем при использовании любой другой техники?

Не могли бы вы помочь мне, представив такой пример?

+0

Алгоритм min max является хорошим примером – Regenschein

ответ

2

Взаимная рекурсия не очень распространена, но иногда она полезна. Анализ текста с помощью метода «рекурсивного спуска» - это одна практическая установка, где вы можете ее найти.

http://en.m.wikipedia.org/wiki/Recursive_descent_parser

1

Один случай использования, что я вообще есть, когда я пишу программу, чтобы играть в игру. В этом случае вы часто будете использовать рекурсию для прохождения игрового дерева, чтобы вычислить лучший ход.

Хотя это часто можно сделать довольно просто без взаимной рекурсии, может быть полезно кодировать его таким образом, когда логика для каждого игрока достаточно сложна, чтобы оправдать ее собственную функцию, и есть достаточно разных игроков, где пытаются чтобы одна гигантская функция давала гигантский беспорядок.