php基本算法汇总、递归运行规则

递归函数思想

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

递推思想

在这里插入图片描述

区别:
对比图例后我们可以发现递归和递推是有所差异的,递推的整体思想是从小到大,而递归的整体思想是从大到小,再从小回到大。简单说,递推是更新变量的旧值,递归是在函数中调用函数自身。

举例: 求斐波那契数列的第n项的值(递推最经典的问题)

斐波那契数列的规律:1, 1, 2, 3, 5, 8, 13, 21…(最前的两个数都为1,从第3位开始,后面每位数为前两位数的和)

斐波那契数,亦称之为斐波那契数列(意大利语: Successione di Fibonacci),又称黄金分割数列、费波那西数列、费波拿契数、费氏数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……在数学上,斐波那契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=Fn-1+Fn-2(n>=2,n∈N*),用文字来说,就是斐波那契数列列由 0 和 1 开始,之后的斐波那契数列系数就由之前的两数相加。

快速推递

在这里插入图片描述

递归解法:

使用递归方法。 顺着思路去想, f(1)= 1; f(2) = 1 ; f(3) = f(2)+f(1) 【2】 f(5) = f(3)+f(2)

//使用递归方式求斐波那契数
    public function fb($n){  //
        if( $n <=2){
            return 1;
        }else{
            return fb($n-1) + fb($n-2);
        }
    }
运行结果为21 递归方法,每多一层,就要向下递归两次。 约为 O(2 的N次方) 而递推算法为 O(n)

各种算法题目

1. 如下图,有3*4的方格,其中左上角为A点,右下角为B点,现在需要从A点开始,沿着图中黑色的线走到B点,每次只能往右或者往下移动,问共有多少种不同的走法?要求:计算出最终结果或者给出算法描述均可

在这里插入图片描述

最佳答案:
function aaaaa($x,$y){
    if($x ==0) return 1;
    if($y ==0) return 1;
    return aaaaa($x-1,$y)+ aaaaa($x,$y-1);
}
var_dump(aaaaa(4,3));   //35
2. n从1开始,每个操作可以选择对n加1,或者对n加倍。如果最后结果为2013,最少需要_____个操作。
最佳答案:
$i = 1;
$sum = 2013;

while (true){
    if($sum % 2 ==1){
        $sum = ($sum - 1);
    }else{
        $sum = $sum / 2;
    }
    if($sum <=1){
        break;
    }
    $i ++;
}
echo $i;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章