首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

求指点递归调用如何理解

2012-04-27 
求指点递归调用怎么理解每次看到递归我就头大....看不懂啊,有木有...这周莫名其妙的就被人拉去参加学校的A

求指点递归调用怎么理解
每次看到递归我就头大....

看不懂啊,有木有...

这周莫名其妙的就被人拉去参加学校的ACM....

上来就是递归题...

可是我看递归很费力,大家给据点例子,说点经验,怎么去看那些递归调用...

[解决办法]
作为一种算法,自然是要了解的

为了爬上N楼
必须先爬上N-1楼【这就是递归思想了,N-1就是简化问题的过程】
而0楼不需要爬,你现在站在那【这是递归结束的地方,否则上面的过程一直进行下去,栈会溢出】

程序运行:
现在你要爬100楼
必须先爬99楼
必须先爬98楼
必须先爬97楼
……
[解决办法]
调用自己直到遇到出口,再层层返回和处理。
递归还是很有用的。
[解决办法]
多写一点递归程序就明白了,什么迷宫搜索啊、八皇后、汉诺塔、24点之类的~
递归还是有用的,很省代码,用递归两三行的程序,用非递归要费老劲了~


其实,无需设想递归的展开过程,指数级的复杂度岂是人脑想的明白的?

关键是,找出共同子逻辑,和结束递归的边界条件~
[解决办法]
简单举个对于树的递归例子:在这个例子中只要记住两点就行了,分别以代码注释方式写在例子中;

VB.NET code
public sub printNode(byval currentNode as treenode)    '第 1 点:这里只要记住这个方法入口参数传进来的永远是当前节点;    console.writeline(currentNode.text)   '指的就是我们对递归到每一个节点后的操作;    '第 2 点:对操作完的节点的所有(直系)孩子进行遍历,    '        同时要重新调用这个方法本身,并把孩子当参数传进去;    for each node as treenode in currentNode.nodes        printNode(node)    nextend sub 

热点排行