为什么树的深度优先遍历可以写成递归模式,而宽度优先遍历不能?

今天在讨论python题目时,被某人今天问了一个问题:为什么树的深度优先遍历可以写成递归模式,而宽度优先遍历不能?。仔细讲解以后,还要我作个笔记,并给出以下提示:
1. 递归与函数的关系
2. 叙述系统如何为函数分配内存

3. 叙述系统为函数分配内存的数据结构的是什么

4. 叙述这个数据结构与一个函数是否能够写成递归的关系

5. 扩展:叙述一个通用的办法,这个办法可以把所有递归的算法写成非递归算法

笔记如下:
递归是在满足一定条件下,同一函数的逐级调用。
系统采用栈保存函数的首地址和参数。栈具有“先进后出”特点,刚好可以实现递归函数的调用关系。深度优先遍历是可以用栈表示的过程,而宽度优先遍历不可以,因此,可以采用递归实现,而宽度优先遍历不能。
由于系统为栈分配的大小是一定,比如2M,且栈是由高地址向低地址分配的,因此递归方法要预防出现“栈溢出”的异常。
通常,一个递归算法可以通过采用栈保存数据改写成一个非递归算法。

周末学python

最近想换工作,因为本就没打算在上海久待,且目前的工作让自己没有存在感了。现在每天一早坐在工位,再也没了刚入职时责任感,和奋斗的感觉。

但是,前两个星期的找工作经历很让我受挫;简历基本上都被拒绝了,唯一的面试机会也因为上班错过了。即使面试了,估计也没什么希望。正如,一开始计划找工作的担忧一样,我确实没准备好。没有互联网的测试经验,没有Java等语言的开发经验,而我却想做互联网行业的测试开发。更何况,我在开发方面也只是一只小菜鸟。

看来,这次换工作会是一个“漫长”的过程了。


周六,懒猪开始让我做leetCode OJ。我看完了廖雪峰的python教程,也只是纸上谈兵。从最简单的题目开始做起。到周日晚上十点,已经完成了10题目。打算在CSDN的博客上作个总结。

一开始,用新学习的语言写代码,是有些艰难。我没办法把自己的想法抽象成代码表达出来。大牛肯定没法理解菜鸟会被逼哭。那可能是因为即委屈又懊恼,即紧张又无语,到不知怎么办吧。

不管怎么说,这个周末还是要感谢懒猪。当然,以后要自己勤动手写代码,克服懒和害怕的心理。