2011-01-20 15 views
5

Estaba tratando de enseñar a un compañero de trabajo junior cómo convertir la subrutina recursiva a iterador (obtiene desbordamientos de pila), y se metió en problemas tratando de explicar el proceso en una forma fácil de entender I puedo hacerlo, pero no sé cómo explicarlo bien a alguien que no lo hace.Conversión de recursividad en iteración - en busca de un tutorial fácil de comprender que cubre la recursión complicada

Entonces, lo que estoy buscando es un buen tutorial que muestre cómo tomar una muestra de una subrutina recursiva complicada y convertirla en un bucle.

Tenga en cuenta que el ejemplo en el tutorial debe ser complicado; Estoy no buscando un ejemplo de recursividad de cola trivial. Para ser más específicos, el ejemplo debe mostrar ejemplos de lo ideal:

  • más de una llamada recursiva dentro de la misma subrutina.

  • más de una instrucción de retorno dentro de la misma subrutina (incluyendo algunos después de una llamada recursiva y algo independiente de ellos)

  • llamadas recursivas que suceden en el medio de la estructura de control anidado (por ejemplo if ($x) { statement 0; if ($y) { statement1; statement2; $res = recursive_call(); $statement 3; optional return; }; statement_end; }

Debe ser un tutorial práctico con ejemplos de código detallados: la mano genérica "almacenar bien los parámetros en una pila" que indica que la mayoría de mis búsquedas en Google mejoradas son muy buenas pero no útiles para principiantes.

Cualquier lenguaje no funcional funcionará (C++, Java, Perl, pseudocódigo, lo que sea), aunque el código específico en cuestión está en Perl.

La parte que REALMENTE hace que sea difícil explicar de forma inteligente es, por supuesto, varias llamadas dentro de las estructuras de control; básicamente, necesita volver a ingresarlas en el punto correcto al abrir la pila.

+0

NOTA: Creo que la dificultad PUEDE ser que el método que estoy usando no sea el mejor. – DVK

+0

@FM: ¿por qué eliminaste tu respuesta? HOP es un buen recurso, y el ejemplo que cubre ciertamente no es trivial, aunque necesito volver a leerlo para ver si satisface mis necesidades como tutorial – DVK

+0

OK, restauré la respuesta. Es un buen capítulo, aunque podría no encajar en este caso (?). – FMc

Respuesta

4

Ha pasado un tiempo desde que lo busqué, pero ¿no cubre esto bastante bien el tema: Higher Order Perl, Capítulo 5, "De la recursividad a los iteradores"?

Cuestiones relacionadas