Daniel Segovia

Blog personal

Archive for enero, 2011

Parametros predeterminados

Hacer un comentario

Como ya hemos visto las funciones reciben parametros, estos pueden ser predeterminados, entonces cuando se invocan las funciones sin enviarlos, éstos toman los valores predeterminados.

<?php
 
function incremento($num, $inc = 1){
    return $num + $inc;
}
 
echo incremento(5); //6
echo incremento(9,4); //13
?>

Written by Daniel Segovia

enero 24th, 2011 at 3:35 pm

Funciones recursivas

Hacer un comentario

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);
    }
}
?>

Written by Daniel Segovia

enero 13th, 2011 at 4:31 pm