递归,程序运行顺序

 

by zhouXin

 

看到各位js技术长进不少了,我就不在纠缠在此。

但我发现各位童鞋其实对程序的一些基本运行的东西搞得不是很懂,所以我打算从递归入手,回归到一些基本的问题上。

 

首先看一下这个简单的算法,先序遍历一颗树

void travel(Tree node)
{
printf(node.data);
for(int i = 0; i < node.child.length; i++)
travel(node.child[i]);
}

 

 

这是伪代码。

为了分析这个算法,有这样的一个工具,我也不知道它是什么称呼的,反正我暂时先叫他“递归程序树”

221

 

程序先从左到右,从上到下执行。

具体是的运行顺序是从树根开始,再从上到下遍历所有子树。

但一个根的所有孩子都被访问,那这个根所表示的函数才算运行完,所以,travel根是最先开始运行,但是是最后运行结束的函数,而其他程序是他的内部函数。

《数据结构》的树上有讲这个图。

 

我曾经问过某个同学这个问题

int A()
{
B();
messbox.show(i);
}

int B()
{
C();
}

int C()
{
i = 0;
}

//这也是伪代码


C()执行玩之后下一条语句是什么,B()呢?

 

 

答案都是messbox.show(i);

 

那回到ajax的同步异步的问题。

同步很简单,就跟我们的普通程序一样,按顺序执行,用“递归树”就可以分析清楚。

而异步的区别既是,当onreadystatechange事件激发的之前,一切按同步,

当onreadystatechange事件激发的时候,程序会发送个中断,将原本按照同步应该执行的下一条命令暂停,

执行完onreadystatechange的事件后,一切又恢复同步,接着执行。

 

 

ps:这篇很水,但是很基本,有些同学已经掌握,有些同学倒是没有注意过,所以这里提一下。

 

 

 

 

------------

今天忘记讲的,

这棵树可以用来检测你的程序算法逻辑有没有问题,相信画出来后会一目了然。

另外可以帮助你调试,看树的节点的倒序回来调试,比盲头苍蝇似的乱alert会跟有效率。

posted on 2010-09-18 11:47  gdutlab624  阅读(580)  评论(0编辑  收藏  举报

导航