php 斐波那契数列 递归 递推
<?php
header("content-type:text/html;charset=utf-8");
class ClassFbnq{
// 递归求和
public function fbnq($n){
if($n <= 0){
return 0;
}else if($n == 1){
return 1;
}else{
return $this->fbnq($n-1) + $this->fbnq($n-2);
}
}
// 递推求和
public function recursion_fbnq($n){
$num1 = $num2 = $temp = 1;
for($i = 3 ; $i <= $n ; $i++){
$temp = $num1 + $num2;
$num1 = $num2;
$num2 = $temp;
}
return $temp;
}
// 公式求和
public function math_fbnq($n){
// string pow( x , y ) - 返回 x 的 y 次方的幂。如果可能,本函数会返回 integer。 如果不能计算幂,将发出一条警告,pow() 将返回 false。
// float sqrt( float arg ) - 求一个数的平方根 返回 arg 的平方根。
$a = pow((1+sqrt(5))/2,$n);
$b = pow((1-sqrt(5))/2,$n);
$c = sqrt(5);
return ($a - $b)/$c;
}
// 数组求过程
public function array_fbnq($n){
$array[0] = $array[1] = 1;
for($i = 2 ; $i < $n ; $i++){
$array[$i] = $array[$i-1] + $array[$i-2];
}
// join() - 把数组元素组合为一个字符串:
return join(" ",$array);
}
}
$fbnq = new ClassFbnq();
echo "斐波那契数列 - 求和:" . $fbnq->fbnq(6) . "<hr>";
echo "斐波那契数列 - 求和(递推):" . $fbnq->recursion_fbnq(6) . "<hr>";
echo "斐波那契数列 - 求和(公式):" . $fbnq->math_fbnq(6) . "<hr>";
echo "斐波那契数列 - 过程(横排):" ;
for($i = 1 ; $i <= 6 ; $i++){
echo $fbnq->fbnq($i) . " ";
}
echo "<hr>";
echo "斐波那契数列 - 过程(竖排):" . "<br>";
for($i = 1 ; $i <= 6 ; $i++){
echo $fbnq->fbnq($i) . "<br>";
}
echo "<hr>";
echo "斐波那契数列 - 过程(每五个一排):" . "<br>";
for($i = 1 ; $i <= 10 ; $i++){
echo $fbnq->fbnq($i) . " ";
if($i % 5 == 0){
echo "<br>";
}
}
echo "<hr>";
echo "斐波那契数列 - 过程(数组):" . $fbnq->array_fbnq(6);