/**
  * Recursive utility method used by Math_Fibonacci::decompose()
  * 
  * @param integer $num
  * @param array $sum array of Fibonacci numbers
  * @return mixed null on success, PEAR_Error otherwise
  * @access private
  */
 function _recDecompose($num, &$sum)
 {
     /*{{{*/
     if (!Math_IntegerOp::isMath_Integer($num)) {
         return PEAR::raiseError('Not a valid Math_Integer object');
     }
     if (!is_array($sum)) {
         $sum = array();
     }
     $n = Math_Fibonacci::_estimateN($num);
     if (PEAR::isError($n)) {
         return $n;
     }
     $fibn = Math_Fibonacci::term($n);
     if (PEAR::isError($fibn)) {
         return $fibn;
     }
     $cmp = Math_IntegerOp::compare($fibn, $num);
     if ($cmp == 0) {
         $sum[] = $fibn;
         return null;
     } elseif ($cmp == -1) {
         $sum[] = $fibn;
         $newnum = Math_IntegerOp::sub($num, $fibn);
         Math_Fibonacci::_recDecompose($newnum, &$sum);
     } elseif ($cmp == 1) {
         $n_1 = Math_IntegerOp::sub($n, new Math_Integer(1));
         if (PEAR::isError($n_1)) {
             return $n_1;
         }
         $fibn_1 = Math_Fibonacci::term($n_1);
         if (PEAR::isError($fibn_1)) {
             return $fibn_1;
         }
         $sum[] = $fibn_1;
         $newnum = Math_IntegerOp::sub($num, $fibn_1);
         Math_Fibonacci::_recDecompose($newnum, &$sum);
     }
 }
<?php

// $Id: testMath_Fibonacci.php,v 1.1 2003/01/02 01:57:00 jmcastagnetto Exp $
include_once 'Math/Fibonacci.php';
$idx = 20;
echo "Calculate F({$idx}), fast equation = ";
$fib =& Math_Fibonacci::term($idx);
echo $fib->toString() . "\n";
$idx = 55;
echo "Calculate F({$idx}), lookup table = ";
$fib =& Math_Fibonacci::term($idx);
echo $fib->toString() . "\n";
$idx = 502;
echo "Calculate F({$idx}), addition loop = ";
$fib = Math_Fibonacci::term($idx);
echo $fib->toString() . "\n";
echo "\nSeries from F(0) to F(10):\n";
$series = Math_Fibonacci::series(10);
foreach ($series as $n => $fib) {
    echo "n = {$n}, F(n) = " . $fib->toString() . "\n";
}
echo "\nand now from F(11) to F(19):\n";
$series = Math_Fibonacci::series(11, 19);
foreach ($series as $n => $fib) {
    echo "n = {$n}, F(n) = " . $fib->toString() . "\n";
}
echo "\nChecking if 26 and 4181 are Fibonacci numbers\n";
$verb = Math_Fibonacci::isFibonacci(new Math_Integer(26)) ? 'is' : 'is not';
echo "26 {$verb} a Fibonacci number\n";
$verb = Math_Fibonacci::isFibonacci(new Math_Integer(4181)) ? 'is' : 'is not';
echo "4181 {$verb} a Fibonacci number\n";