+ -
当前位置:首页 → 问答吧 → 递归算法求教??

递归算法求教??

时间:2011-08-03

来源:互联网

<?php
function demo($var) {
  echo $var;
  echo '<br />';
  if($var>0) {
  echo demo($var-1);
  } else {
  echo '==========';
  }
  echo '<br />';
  echo $var;
}
demo(10);
?>

以上函数执行结果如下:
10
9
8
7
6
5
4
3
2
1
0
==========
0
1
2
3
4
5
6
7
8
9
10

谁能帮我详细讲解一下函数执行过程?小弟搞不懂啊!谢谢~!

作者: leondaa   发布时间: 2011-08-03

你用单步调试可以看得很清楚,

作者: 51nosql   发布时间: 2011-08-03

1、demo(10);
echo 10;
echo '<br/>';
10>0:demo(9); 把10压入栈

2、demo(9);
echo 9;
echo '<br/>';
9>0: demo(8); 把9压入栈
...
直到$var<=0才不会递归
echo '==========';
然后从调用栈顶开始依次返回,执行:
echo '<br />';
echo $var;

作者: 51nosql   发布时间: 2011-08-03

另外:if($var>0) {
  echo demo($var-1);
  } else
...
这里的echo不需要,有了反而会误导

作者: 51nosql   发布时间: 2011-08-03

谢谢!

作者: leondaa   发布时间: 2011-08-03

“压入栈”是什么意思?是不是如果
1、demo(10);
echo 10;
echo '<br/>';
10>0:demo(9); 把10压入栈

这里把10压入栈是怎样解释?

作者: leondaa   发布时间: 2011-08-03

在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储

作者: 51nosql   发布时间: 2011-08-03

LZ可以复习一下递归的基础知识

作者: 51nosql   发布时间: 2011-08-03