递归在实际编程中有着很重要的用处,最常见的用途莫过于文件搜索目录遍历了,我曾花了很长时间研究递归的性质,发现所有递归都可以用树的结构描述出来,这只是我的发现,并没有严格的证明,至少在我所研究过的所有递归应用实例中是成立的。
递归的效率显然不是很高,因为每次递归的时候,调用函数时得分配栈空间,函数返回时,撤销栈空间,所以,用能循环取代递归的,就尽量用循环实现。
一次我在街头因好奇心强而与摆地摊的人下了一盘棋,很明显是我输了三十元,也惹得那时的女友大发脾气。为此,我回家后潜心研究象棋编程,神奇的发现,强大的象棋引擎竟然只是一个递归+评估函数,从此我迷上了递归,在这里我把心得贴出来,作为笔记。
在象棋编程里最基本的“最大-小最搜索”,可以说其它算法都是从它基础上发展出来的。最小-最大搜索就是一个递归函数。我写了很少的代码,用一个更好的函数来完成同一件事,因此我首先写出纯粹的(不完美的)最小-最大函数,代码如下:
int MinMax(int depth) {
if (SideToMove() == 阅读全文>
发表于 @ 2009年02月10日 17:31:00|评论(loading...)|举报|收藏