<?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谁能帮我详细讲解一下函数执行过程?小弟搞不懂啊!谢谢~!
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谁能帮我详细讲解一下函数执行过程?小弟搞不懂啊!谢谢~!
function demo($var) {
echo $var;
echo '<br />';
if($var>0) {
echo demo($var-1);
} else {
echo '==========';
}
echo '<br />';
echo $var;
}
demo(10);
?>
我这里写一下每一步的输出吧。
1. 10
demo(9)
10
2. 10
9
demo(8)
9
10
3. 10
9
8
demo(7)
8
9
10
依次类推到最后:
10. 10
9
8
7
6
5
4
3
2
1
demo(0) (然后接着递归调用这个函数,由于已经是0,所以输出======)
1
2
3
4
5
6
7
8
9
10
在此方法中输出 10 和一个换行;
进入if判断;
执行demo(10-1),而此时demo(10)要等到demo(9)执行完毕以后才可继续执行;
输出9和一个换行
依次类推直到执行到demo(1-1)即demo(0)
输出0和一个换行
此时0<0判断否,执行else输出=========
然后继续输出下面的一个换行,再输出0
此时demo(0)执行完毕,返回demo(1)继续执行
输出 1 和一个换行;
然后返回demo(2),执行输出2 和一个换行
依次类推
(1) 递归就是在过程或函数里调用自身。
(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
(3) 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。
(4) 在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。所以一般不提倡用递归算法设计程序。递归的原理,其实就是一个栈(stack), 比如求5的阶乘,要知道5的阶乘,就要知道4的阶乘,4又要是到3的,以此类推,所以递归式就先把5的阶乘表示入栈, 在把4的入栈,直到最后一个,之后呢在从1开始出栈, 看起来很麻烦,确实很麻烦,他的好处就是写起代码来,十分的快,而且代码简洁,其他就没什么好处了,运行效率出奇的慢.例: 求n-1的阶乘
f(n)
{
if(n == 0 || n == 1)
{
return 1;
}
else
{
return n*f(n-1); //自己调用自己,求n-1的阶乘
}
}