if(n==1) move(one,three);
else{
hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);
}
hanoi(n,x,y,z)表示借助y把n个从x移到z
我们用A,B,C分别表示你的程序中的one,two,three
n=3为例,我的理解如下(用缩进表示调用关系,后面的数字表示实际移动的七步):
hanoi(3,A,B,C)
.........hanoi(2,A,C,B)
....................hanoi(1,A,B,C)
..............................move(A,C)------------1
....................move(A,B)--------------------2
....................hanoi(1,C,A,B)
..............................move(C,B)------------3
.........move(A,C)-----------------------------4
.........hanoi(2,B,A,C)
....................hanoi(1,B,C,A)
..............................move(B,A)------------5
....................move(B,C)--------------------6
....................hanoi(1,A,B,C)
..............................move(A,C)------------7