求指点递归调用怎么理解
每次看到递归我就头大....
看不懂啊,有木有...
这周莫名其妙的就被人拉去参加学校的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)
next
end sub