Es un algoritmo utilizado para resolver problemas de todo tipo, que tiene como característica que se invoca a si mismo, enviando una porción del problema a resolver más pequeña. Cuando el problema es trivial, da la solución y al realizar las llamadas hacia atrás, se completa la resolución del problema inicial.