PHPでフィボナッチ数列を実装してみました。
fb1の方は、再帰処理になっているが、再帰によって呼び出しされた時に
配列に入れる事によって処理が重くなりすぎる点を考慮したもの。
fb2の方は、何も考えずに再帰処理で行ったもの。
<?php
$max_num= trim(fgets(STDIN));
if( !($max_num + 0 > 3) ){
$max_num = 5;
}
$num = 0;
$array = null;
echo "##### fb1 #####". PHP_EOL;
$time_start = microtime(true);
print_r(fb1($array,$num,$max_num));
echo PHP_EOL;
echo microtime(true) - $time_start ,"s". PHP_EOL;
echo PHP_EOL;
/*
echo "##### fb2 #####". PHP_EOL;
$time_start = microtime(true);
print_r( fb2($max_num) );
echo PHP_EOL;
echo microtime(true) - $time_start ,"s". PHP_EOL;
echo PHP_EOL;
*/
function fb1($array,$num,$max_num) {
if( $num > $max_num ) {
return $array;
exit;
}
if( !isset($array[$num-1]) || !isset($array[$num-2])) {
$array[] = 1;
} else {
$array[] = $array[$num-1] + $array[$num-2];
}
return fb1($array,$num+1,$max_num);
}
function fb2($n){
if ($n < 2) return $n;
return fb2($n - 2) + fb2($n - 1);
}