最近看了一些递归的代码,感觉非常地晕乎。。。记一下自己的理解吧
递归的思想是函数反复调用自身,每一个函数要用调用自己,将自己的返回值加入运算,直到达到某一条件才停止,这时,被调用函数一层一层返回,直至返回到最初被调用的函数并且函数返回值被使用,这才算完。
用人脑跟踪参数的使用感觉有点晕晕乎乎的,因为记不住上一层的调用关系。我的理解是,上不需要管计算机怎么传参数啊,怎么调用返回值啊,程序员只要调用了函数,当作这一层已经实现,至于计算机怎么实现,问下一层调用函数吧。
另外递归函数的设计也需要注意巧妙一些,就以汉诺塔游戏为例吧(代码就不贴了)。其中交换b,c参数的设计就非常巧妙,汉诺塔第一次从a借助b移动n个盘子到c,语句写为:move(n,a,b,c);然而在move函数定义的内部调用move时,语句却是move(n-1,a,c,b),表示从a借助c移动n-1个盘子到b,巧妙地交换了形参的位置,达成了每一次需要移动的柱子要交换的目的(这是以前文曲星上玩这个游戏的窍门)。
然而程序员不需要知道这个窍门,只要知道三个步骤:
1.从a移动n-1个盘子到b。
2.把最大的盘子从a移动到c。
3.把b上刚刚移过来的n-1个盘子移动到a。
就行了,其余的,交给计算机来演算吧。