Finbonacci Sequence (費氏數列、費伯納數列) 對於寫程式的人來說應該不陌生。數學上的費氏數列是以遞迴方式定義的,如下
F0 = 0, F1 = 1 時,Fn = Fn-1 + Fn-2
用文字來說,就是費氏數列由 0 和 1 開始,之後的費氏數列就由之前的兩數相加。前幾個數字是
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377.....
用遞迴方式的標準寫法是…
<?php
function fib($n){
if($n == 0) return 0;
if($n == 1) return 1;
return fib($n-1) + fib($n-2); // 只有return,沒有echo
}
for($i = 0; $i <= 10; $i++){
echo fib($i).' '; // 實際上輸出數列
}
?>
0 1 1 2 3 5 8 13 21 34 55
但是用這種方法才能看到數列也太瞎了,所以想改成計算過程中就輸出數列的版本,想不到這問題還真的要思考一下…. 最後的成果如下….
<?php
function fib($n, $output = true){
if($n == 0){
if($output) echo '0 ';
return 0;
}
if($n == 1){
if($output){
fib(0, true);
echo '1 ';
}
return 1;
}
$a = fib($n-1, $output);
$b = fib($n-2, false);
$sum = $a + $b;
if($output) echo $sum.' ';
return $sum;
}
fib(10);
?>
0 1 1 2 3 5 8 13 21 34 55
同樣的題目用 for loop 寫倒是蠻簡單的
<?php
function fib_in_loop($x){
$sum = 0;
$a = 0;
$b = 1;
for($i = 0; $i < $x; $i++){
printf('%d ', $b);
$sum = $a + $b;
$a = $b;
$b = $sum;
}
return $sum;
}
fib_in_loop(10);
?>
0 1 1 2 3 5 8 13 21 34 55
Leave a Reply