递归,程序运行顺序
by zhouXin
看到各位js技术长进不少了,我就不在纠缠在此。
但我发现各位童鞋其实对程序的一些基本运行的东西搞得不是很懂,所以我打算从递归入手,回归到一些基本的问题上。
首先看一下这个简单的算法,先序遍历一颗树
void travel(Tree node)
{
printf(node.data);
for(int i = 0; i < node.child.length; i++)
travel(node.child[i]);
}
这是伪代码。
为了分析这个算法,有这样的一个工具,我也不知道它是什么称呼的,反正我暂时先叫他“递归程序树”
程序先从左到右,从上到下执行。
具体是的运行顺序是从树根开始,再从上到下遍历所有子树。
但一个根的所有孩子都被访问,那这个根所表示的函数才算运行完,所以,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会跟有效率。
转载于:https://www.cnblogs.com/gdutlab624/archive/2010/09/18/1830083.html