关于递归,无法理解!!

tianyaxiao 2008-06-17 06:58:19
示例:

<?php
$b=0;
function a($i){
global $b;
if(!$i){return;}
$a=$i;
echo $a,' ';
$i--;
a($i);//开始递归
$b++;
echo $b,' ';
}
a(100);
?>

执行结果:
100 99 98 97 96 95 94 93 92 91 90 89 88 87 86 85 84 83 82 81 80 79 78 77 76 75 7
4 73 72 71 70 69 68 67 66 65 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48
47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21
20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10 11 12 1
3 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 9
3 94 95 96 97 98 99 100 请按任意键继续. . .

问题:为什么在递归后面的代码是在前面全部循环完毕后才开始执行?
...全文
152 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
PleaseDoTellMeWhy 2008-06-18
  • 打赏
  • 举报
回复
那个递归不太好,我改了一下!
他就好比一层一层进去在一层一层退出来,也不知道这样说恰当不!

<?php

#$b=0;

function a( $i )
{
#global $b;
if( !$i ){ return; }
$a=$i;
echo $a,' ';
$i--;
a($i);//开始递归
#$b++;
#echo $b,' ';
echo $i,' ';
}
a(100);
tianyaxiao 2008-06-18
  • 打赏
  • 举报
回复
奇怪了,明明显示有3个回复,怎么一个都没有?
testoktest 2008-06-18
  • 打赏
  • 举报
回复
a($i);//开始递归
echo 'somethig';

按照顺序执行的话,echo,应该在a($i)运行完后
a($i)(第1次)运行的时候,a()内部又再次调用a($i)(第2次),在这个运行的过程中,对于a($i)(第1次)是没有运行完,所以不存在echo(第1次)
只有当a($i)(最后1次),它本身运行到一半的时候,发现条件不满足,return了,算它本身结束了
之后,对于上一层:a($i)(倒数第2次)来说,a($i)调用完毕,因此echo了,
之后,又是上上层


wildlily980 2008-06-17
  • 打赏
  • 举报
回复
递归就是这样规定的啊。
uddwfn521 2008-06-17
  • 打赏
  • 举报
回复
顺序.. "v" 下去 在上来

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧