La mejor manera de hablar sobre la recursividad es a un alto nivel: descomponerlo en casos básicos y casos recursivos. (Casualmente, esta es también la mejor manera de pensar acerca de la recursividad). Esta es la misma estructura que la prueba por inducción, que es cómo demostraría que su función hace lo correcto y termina.
Digamos que está escribiendo una función recursiva simple que calcula la profundidad de un árbol:
profundidad (Hoja _) = 1
profundidad (nodos secundarios) = 1 + máximo (profundidad de mapa secundarios)
- ¿Se puede estafar el algoritmo de Zoopla para inflar el precio de una propiedad?
- En programación de computadoras, ¿cómo es recursivo el proceso de evaluación?
- ¿Cómo puede Bulk Synchronous Parallel relajar las contracciones de sincronización de superpasos?
- ¿Qué es el algoritmo SURF en el procesamiento de imágenes?
- ¿Hay algún buen sitio para aprender algoritmos / conceptos de programación todos los días (similar a la pregunta SAT del día)?
En lugar de pasar por este árbol paso a paso, hable sobre las dos posibilidades:
- si tenemos un nodo hoja, su profundidad es 1 por definición
- la profundidad de un nodo es 1 + la profundidad de su hijo más profundo
También tenga en cuenta cómo la recursión sigue naturalmente la forma del árbol. ¡Tiene sentido que una función que analiza un árbol refleje la forma de ese árbol en su lógica!
Esta descripción captura exactamente la lógica en cuestión, sin confundirse con toda la recursión que ocurre. Seguir esta simple función recursiva paso a paso es confuso porque se ramifica y recurre varias veces en cada nodo. Tomaría un cálculo en forma de árbol y lo linealizaría de alguna manera, lo cual es innecesariamente complejo y oscurece la naturaleza de la función.
Si realmente tiene que recorrer toda la función, tal vez su entrevistador lo pregunte explícitamente, puede hablar sobre “llamadas recursivas” en lugar de “iteraciones”. Pero no lo recomiendo la mayor parte del tiempo: tratar de pensar en definiciones recursivas de la forma en que piensas en los bucles simplemente no escala . Puede funcionar para las funciones recursivas más triviales, pero se desmorona totalmente en una lógica más compleja, recursividad mutua, etc.