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: 18 años, 3 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 + 1, self::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.