PHP递归与迭代的区别与联系 筋斗云网络
递归自身调用自身,每一次调用把问题简化,直到问题解决.
迭代:就是指在某个范围内,反复执行相同工作.
递归: 5只猴子,每只猴子,摘1颗桃,完成1步工作
迭代: 1只猴子,这只儿子,摘5颗桃,完成5步工作
递归自身调用自身,每一次调用把问题简化,直到问题解决.
PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 |
/* 这是一个典型的递归调用, 在计算出结果前,最多的时候,共有10个函数同时运行. */ function recsum($n) { if($n > 1) { return $n + recsum($n-1); } else { return 1; } } echo recsum(10),'<br />'; |
迭代:就是指在某个范围内,反复执行相同工作.
1 2 3 4 5 6 7 |
function itsum($n) { for($sum=0,$i=1;$i<n;$i++) { $sum += $i; } return $sum; } |
理论上:(借助栈)递归都是可以转化为迭代的!
迭代来创建级联目录
./a/b/c/d
思路:要把从浅到深创建目录的步骤,列成单子.
然后1只小猴,一层层的去创建
PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
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'); |
赞 (0)