PHP递归与迭代的区别与联系

  • 1,194

递归自身调用自身,每一次调用把问题简化,直到问题解决.
迭代:就是指在某个范围内,反复执行相同工作.
递归: 5只猴子,每只猴子,摘1颗桃,完成1步工作
迭代: 1只猴子,这只儿子,摘5颗桃,完成5步工作

/*
这是一个典型的递归调用,
在计算出结果前,最多的时候,共有10个函数同时运行.
*/
function recsum($n) {
    if($n > 1) {
        return $n + recsum($n-1);
    } else {
        return 1;
    }

}
echo recsum(10),'<br />';
function itsum($n) {
    for($sum=0,$i=1;$i<n;$i++) {
        $sum += $i;
    }
    
    return $sum;
}

理论上:(借助栈)递归都是可以转化为迭代的!

迭代来创建级联目录
./a/b/c/d
思路:要把从浅到深创建目录的步骤,列成单子.
然后1只小猴,一层层的去创建

function mk_dir($path) {
    $arr = array();
    
    while(!is_dir($path)) {
        // 例 /a/b/c/d 如果不目录,则是我的工作
        array_push($arr,$path); //工作计划入栈
        $path = dirname($path);
    }

    //print_r($arr);

    if(empty($arr)) {
        return true;
    }

    // 工作计划出栈
    while(count($arr)) {
        echo $tmp = array_pop($arr),'出栈<br />';
        mkdir($tmp);
    }

    return true;
}


mk_dir('./a/b/c/d/e');

 

weinxin
我的微信
这是我的微信扫一扫
开拓者博主
  • 本文由 发表于 2016年9月18日20:15:32
  • 转载请务必保留本文链接:https://www.150643.com/349.html
匿名

发表评论

匿名网友 填写信息