递归思想
时间:2007-06-09 来源:yuyii
知道递归,但在平时却很少去用他。这里总结思想:
分析问题
建立模型
找出问题的子问题
设计递归方程(这个应该加上找“边界条件”)
枚举递归的回溯边界
逻辑合并可并的条件和处理
举例:
写一个函数计算s(n) = (1) + (1+2) + (1+2+3) + (1+2+3+4) + … + (1+2+..+n)
以下都只将n取5,容易测试结果
一般算法:
?php
$s=0;
for ($i=1;$i=5;$i++){
$t = ((1+$i)*$i)/2;
echo $t."\r\n";
$s += $t;
}
echo $s;
?>
递归的话可以这么考虑:
s(n)和s(n-1)之间的关系:s(n) = s(n-1)+(1+2+..+n)
考虑递归终结点:n=1时候。s(1) = 1
?php
function sum($n){
if ($n == 1) return 1;
else return sum($n-1)+(1+$n)*$n/2;
}
echo sum(5);
?>
分析问题
建立模型
找出问题的子问题
设计递归方程(这个应该加上找“边界条件”)
枚举递归的回溯边界
逻辑合并可并的条件和处理
举例:
写一个函数计算s(n) = (1) + (1+2) + (1+2+3) + (1+2+3+4) + … + (1+2+..+n)
以下都只将n取5,容易测试结果
一般算法:
?php
$s=0;
for ($i=1;$i=5;$i++){
$t = ((1+$i)*$i)/2;
echo $t."\r\n";
$s += $t;
}
echo $s;
?>
递归的话可以这么考虑:
s(n)和s(n-1)之间的关系:s(n) = s(n-1)+(1+2+..+n)
考虑递归终结点:n=1时候。s(1) = 1
?php
function sum($n){
if ($n == 1) return 1;
else return sum($n-1)+(1+$n)*$n/2;
}
echo sum(5);
?>
相关阅读 更多 +
排行榜 更多 +