Exemplo n.º 1
0
/**
 * fibonacci_series. 
 * Uses static stack ($fs) for memoization to accelerate subsquent calls.
 * 
 * @link https://en.wikipedia.org/wiki/Fibonacci_number
 *
 * @author Jitendra Adhikari <*****@*****.**>
 *
 * @param  int $n  The number of fibonacci to generate
 *
 * @return array   The list with n fibonacci numbers
 *
 * @throws InvalidArgumentException  If input is not valid number
 */
function fibonacci_series($n)
{
    if (!is_numeric($n)) {
        throw new \InvalidArgumentException(sprintf('%s is not valid number', $n));
    }
    static $fs = [0, 1];
    if ($n < 0) {
        $_fs = [];
        foreach (fibonacci_series(-$n) as $k => $f) {
            $_fs[0 - $k] = $k % 2 ? $f : -$f;
        }
        ksort($_fs);
        return $_fs;
    }
    if (isset($fs[$n])) {
        return array_slice($fs, 0, $n + 1);
    }
    while (end($fs)) {
        $fs[] = $fs[key($fs)] + $fs[key($fs) - 1];
        if (isset($fs[$n])) {
            return $fs;
        }
    }
}
Exemplo n.º 2
0
 /**
  * @depends testFibonacciLoader
  * @expectedException \InvalidArgumentException
  */
 public function testFibonacciSeriesException()
 {
     fibonacci_series('str');
 }