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.