关于php中的递归分析
什么叫递归?
举一个通俗的例子:
有一个8俩重的苹果要你切成重量相等的若干份,每一份的重量不能大于1俩。你肯定会想到这样做:
1.第一刀先把一个苹果切成重量均等的2份A1和A2;
2.再把其中的一份A1切成重量均等的两份A11和A12, 把A2切成均等的两份A21和A22;
3.把A11切成均等的两份……
4.直到每一小份都小于等于1俩为止。
以上的例子就是递归一个模型,把一个大的事物化成若干个小的事物,每一次使用的方法都相同。
程序自身调用自身的编程技巧称为递归( recursion)。递归有直接递归和间接递归
•直接递归:函数在执行过程中调用本身。
•间接递归:函数在执行过程中调用其它函数再经过这些函数调用本身。
递归有四个特性:
1.必须有可最终达到的终止条件,否则程序将陷入无穷循环;
2.子问题在规模上比原问题小,或更接近终止条件;
3.子问题可通过再次递归调用求解或因满足终止条件而直接求解;
4.子问题的解应能组合为整个问题的解。
上面的例子中也满足以上的四点性质:
(1).终止条件是每一份的重量不能大于1俩;(2).每一次切的大小都比上一次小;(3).每一次切的方式都相同,所以子问题可递归调用;(4).最终切成的每一小份也就是要求的解。
function cutApple($w,$t){ if($w<1){ echo "已经切完了"; } else{ echo "第".$t."次切割,每份重量是:".($w/2)."<br>"; $t+=1; cutApple($w/2,$t); } }
结果:
第1次切割,每份重量是:7.5
第2次切割,每份重量是:3.75
第3次切割,每份重量是:1.875
第4次切割,每份重量是:0.9375
已经切完了
再举一个通俗的例子:试求等差数列的和:1+2+3+4+...+98+100;
/** * 等差数列求和 * @param [int] $n [第一个数] * @param [int] $m [第二个数] */ function add($n,$m){ if(!is_int($n)||!is_int($m)) return false; static $sum=0; $sum+=$n; $n++; if($n>$m) return $sum; return add($n,$m); } echo add(1,100);
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
以上就是关于php中的递归分析的详细内容,更多请关注其它相关文章!
上一篇: Yii无法捕获到异常的解决方法