Una de las mejores formas de aprender recursividad es obtener experiencia en un lenguaje de programación funcional como Haskell o Lisp o Scheme.
Por lo tanto, la búsqueda de problemas recursivos se puede reducir a la búsqueda de algunos problemas y respuestas relacionadas con los lenguajes de programación funcionales. Aquí hay un ejemplo 99 lisp problems.
Realmente solo toma 5 minutos aprender Scheme o Lisp para que pueda comenzar con ejemplos de inmediato para la prueba que mencionó mañana.
Otra gran manera de aprender la recursión es practicando pruebas matemáticas con inducción.
conceptos clave relacionados con la recursividad:
Con la recursividad no es necesario saber cómo resolver el problema. Solo necesitas saber 2 cosas. 1) cómo resolver la instancia más pequeña del problema, y 2) cómo dividirla en partes más pequeñas.
Equivalentemente, solo tiene que tener en cuenta que necesita: 1) una funda y 2) una funda recursiva.
El caso base maneja 1 instancia única de lo que quiere hacer con la entrada más pequeña.
El caso recursivo divide el problema en un subproblema. Eventualmente, este subproblema se reducirá al caso base.
Ejemplo:
//1+...+n = n*n(+1)/2 = sumAll(n):
int sumAll(int x)
{
if(x == 0) //base case
return 0;
else
return sumAll(x-1) + x; //recursive case
}
Es importante entender que el caso base no es difícil de averiguar. Simplemente tiene que existir. Aquí es una solución equivalente para x> 0:
//1+...+n = n*n(+1)/2 = sumAll(n):
int sumAll(int x)
{
if(x == 1) //base case
return 1;
else
return sumAll(x-1) + x; //recursive case
}
Maldita sea, iba a hacer la broma de recursividad recursiva, pero veo que es la primera respuesta al hilo enlazado. –
Hay un viejo refrán, "Para entender la recursión, ayuda a entender la recursión". –
La sintaxis del lenguaje de programación es independiente de la recursión en sí misma. Por favor considera los lenguajes funcionales. –