Ver Mensaje Individual
  #5 (permalink)  
Antiguo 28/05/2012, 05:19
Avatar de JairLizcano
JairLizcano
 
Fecha de Ingreso: junio-2008
Ubicación: Santander, Colombia
Mensajes: 608
Antigüedad: 16 años, 6 meses
Puntos: 53
Exclamación Respuesta: Salir de funcion recursiva

Me gustaría que revisarás esta clase, es de mi autoría, así te haces otras ideas de recursividad:

Código PHP:
<?php
    
class Recursivity {

        const 
BASIC 0;
        const 
POW 1;

        private 
$base;
        private 
$limit;

        private 
$serie;

        public function 
__construct() {

            
$this->base NULL;

            
$this->limit NULL;

            
$this->serie = new ArrayObject();
        }

        public function 
toFibonacci($integer) {

            
$result $integer $this->base;

            if(
$result $this->limit) {

                return 
$this->serie;
            } else {

                
$this->setBase($integer);

                
$this->serie->append($result);

                return (
$this->toFibonacci($result)) ? $this->serie FALSE;
            }
        }

        public function 
toPlus($integer$mode self::BASIC$level NULL) {

            
$result $integer;

            if(
$mode == self::BASIC) {

                if(
$result >= $this->limit) {

                    return 
$this->serie;
                } else {

                    
$this->serie->append($result);

                    return (
$this->toPlus($result 1)) ? $this->serie FALSE;
                }

            } elseif (
$mode == self::POW) {

                if(!(empty(
$level))) {

                    if(
pow($result$level) >= $this->limit) {

                        return 
$this->serie;
                    } else {

                        
$this->serie->append(pow($result$level));

                        return (
$this->toPlus($result 1self::POW$level)) ? $this->serie FALSE;
                    }
                }
            }
        }

        public function 
getBase() {

            return 
$this->base;
        }

        public function 
setBase($base) {

            
$this->base $base;

            return 
$this;
        }

        public function 
getLimit() {

            return 
$this->limit;
        }

        public function 
setLimit($limit) {

            
$this->limit $limit;

            return 
$this;
        }
    }
?>
Más que todo la función toFibonacci() (al igual que toPlus(), pero es más legible toFibonacci()):

Código PHP:
 public function toFibonacci($integer) { 

            
$result $integer $this->base

            if(
$result $this->limit) { 

                return 
$this->serie// Finaliza la serie de Fibonacci retornando el vector con dichos valores 
            
} else { 

                
$this->setBase($integer); 

                
$this->serie->append($result); 

                return (
$this->toFibonacci($result)) ? $this->serie FALSE;  // Retorno recursivo
            

        } 
Fue un ejercicio algo a falta de tiempo en clase, así que si necesitas documentación con respecto a ella, sólo me dices. Si te interesa.

Buena suerte.
__________________
Programar dejó de ser una profesión acusada en la oscuridad y disfrutada fríamente... para convertirse en un arte.