原理:斐波那契搜索就是在二分查找的基础上根据斐波那契数列进行分割的。在斐波那契数列找一个等于或大于查找表中元素个数的数F[n],将原查找表扩展为长度为Fn,完成后进行斐波那契分割,即F[n]个元素分割为前半部分F[n-1]个元素,后半部分F[n-2]个元素,找出要查找的元素在那一部分并递归,直到找到
//第一种实现方式
function test1($n)
{
$arr = [];
// 第一种 $n=1 $n=2 返回1
$arr[1] = $arr[2] = 1;
if($n == 1 || $n == 2){
return 1;
}else{
// 第二种 $n>2 前一个数 + 前两个数
for ($i=3; $i <= $n; $i++){
$arr[$i] = $arr[$i-1] + $arr[$i-2];
}
return $arr[$n];
}
}
echo test1(10);
//第二种方式递归
function test2($n)
{
// 第一种 $n =1 $n=2 返回1
if($n == 1 || $n==2)
return 1;
// 第二种 $n>2 前一个数 + 前两个数
// $n-1 $n-2
return test2($n-1)+test2($n-2);
}
echo test2(10);