Las funciones recursivas no son más que simples funciones, la particularidad de éstas que es se llaman a sí mismas hasta que llega a un corte que daremos desde la lógica de la función.
Una mala desición en el corte o un error en la lógica puede que la función se llame siempre así misma y nunca.
Por ejemplo si yo quisiera todos los números comprendidos entre 10 y 20, podría hacerlo con un ciclo for, un while o hasta un ciclo do while.
Pero vamos a realizarlo con una función recursiva.
<?php
function desdeHasta($desde, $hasta)
{
if($desde == $hasta)
{
echo "Ultima vuelta, $desde es igual a $hasta <br />";
}
else
{
echo "Desde: $desde Hasta: $hasta <br />";
desdeHasta($desde+1, $hasta);
}
}
desdeHasta(5,10);
?>
Resultado
Desde: 5 Hasta: 10
Desde: 6 Hasta: 10
Desde: 7 Hasta: 10
Desde: 8 Hasta: 10
Desde: 9 Hasta: 10
Ultima vuelta, 10 es igual a 10
Como mencione previamente, si las funciones carecen de una fuerte lógica pueden convertirse la recursividad en infinita, en el ejemplo anterior sí por error en la llamada enviamos el primer parametro mayor que el segundo la función entrará en una recursividad infínita.
En verdad, en este caso no sería infínita la función, sino que correría hasta el mayor número entero, pero es evidante que no nos entregaría el resultado deseado para esa función.
<?php
desdeHasta(15,10);
?>
Resultado
Desde: 15 Hasta: 10
Desde: 16 Hasta: 10
Desde: 17 Hasta: 10
Desde: 18 Hasta: 10
Desde: 19 Hasta: 10
Desde: 20 Hasta: 10
Desde: 21 Hasta: 10
Desde: 22 Hasta: 10
Desde: 23 Hasta: 10
Desde: 24 Hasta: 10
............................
Con este mismo ejemplo lo que podríamos hacer es validar los datos de entrada en la función para evitar problemas.
<?php
function desdeHasta($desde, $hasta)
{
if($desde > $hasta)
{
return false;
}
if($desde == $hasta)
{
echo "Ultima vuelta, $desde es igual a $hasta <br />";
}
else
{
echo "Desde: $desde Hasta: $hasta <br />";
desdeHasta($desde+1, $hasta);
}
}
?>