FreeABC
记忆重叠

PHP递归函数经典算法(斐波那契/阶乘/高斯算法)

<?php 
/*请忽略负数,可自行添加验证*/
//递归算法 求n = 1+2+3+5+8+..+n
function addSum($n){
    if($n == 1){
        return 1;
    }
    return addSum($n-1)+$n;
}

//高斯算法 求n = 1+2+3+5+8+..+n
function addSum2($n){
    return (1+$n)*$n/2;
}

//迭代算法 求n = 1+2+3+5+8+..+n
function addSum3($n){
    $sum = 0;
    for($i = 1; $i <= $n; $i++){
         $sum += $i;
    }
    return $sum;
}

//斐波那契数列 求n = 1+2+3+5+8+..+n
function fibonacci($n){
     if($n<1)
            return -1;
        if ($n == 1 || $n == 2) {
            return 1;
        }
    return fibonacci($n-1) +fibonacci($n-2);
}   

//递归实现阶乘算法n!=1×2×3×...×n
function factorial($i){
if($i==0){                              
     return 1;
}else{
    return $i*factorial($i-1);
    }
}


//三维数组递归求和。
function addArray($arr){
    //因为要递归,避免局部变量重定义。
    static $sum = 0;
    //迭代数组所有元素
    foreach ($arr as $value) {
        //判断如果不是数组,则累加。
        if(!is_array($value)){
            $sum += $value;
            //否则递归函数本身。
        }else{
            addArray($value);
        }
    }
    return $sum;
}

echo addSum(100)."<br />";//5050
echo addSum2(100)."<br />";//5050
echo addSum3(100)."<br />";//5050
echo fibonacci(10)."<br />";//55
echo factorial(6)."<br />";//720
$arr = array(1,2,3,array(4, array(5,6)));
echo addArray($arr);//21
?>
输出结果: 
5050 
5050 
5050 
55 
720 
21

 

未经允许不得转载:Free-Abc智能 » PHP递归函数经典算法(斐波那契/阶乘/高斯算法)
分享到: 更多 (0)