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
?>
<?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 ?>
<?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
输出结果: 5050 5050 5050 55 720 21
输出结果: 
5050 
5050 
5050 
55 
720 
21

 

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