/** * 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";