请问在汉诺塔的递归函数中,计算机是怎么计算每一层的?
我完全搞不懂这个汉诺塔递归函数,比如说当n=2时,计算机是怎么计算怎么出结果的?那么n=3时呢?
我完全搞不懂这个汉诺塔递归函数,比如说当n=2时,计算机是怎么计算怎么出结果的?那么n=3时呢?
2016-12-27
本来不想自问自答的,想了一个中午终于弄明白了,所以回答一下记录自己的思考过程。
当n=1的时候,直接计算出a-->c;
当n=2的时候,
会首先计算move(n-1,a, c, b),即(1,a,c,b),那么符合n=1时的计算法则,即得出a-->b#意思是那个tuple里的第二个元素指向第四个元素。
然后继续执行程序a-->c
最后是计算move(n-1,b,a, c),即(1,b,a, c),这时符合n=1时的计算法则,即得出b-->c#意思是那个tuple里的第二个元素指向第四个元素
当n=3的时候,
计算move(n-1,a, c, b)时就要调用n=2时的结果
然后执行a-->c
最后计算move(n-1,b,a, c)时调用n=2时的结果
也就是说,这个函数的计算方式就是将那个tuple[1](即第二个元素)“-->”tuple[3](即第四个元素),那么如果要表示a-->b的话,就把a放在tuple[1]的位置,b放在tuple[3]的位置;如果要表示b-->c的话,就要把b放在tuple[1]的位置,c放在tuple[3]的位置
举报