不懂原理的同学可以参考一下
Topic sourcemove(3, "A", "B", "C") n = 3: move(2,A,C,B) n=2: move(1,A,B,C) A-->C //第一个输出 move(1,A,C,B) A-->B //第二个输出 move(1,C,A,B) C-->B move(1,A,B,C) A-->C move(2,B,A,C) n=2: move(1,B,C,A) B-->A move(1,B,A,C) B-->C move(1,A,B,C) A-->C
- 1
Leonardo_6666
记移动n个盘子需要f(n)步。首先,需要把前n-1个盘子从 'A' 移动到 'B' ,这需要f(n-1)步,对应"move(n-1,a,c,b)";然后,从 'A' 再往 'C' 移动最大最底层的那块,需要f(1)步,对应"move(1,a,b,c)";最后,将之前的(n-1)个盘子从 'B' 移动到 'C' ,也需要f(n-1)步,对应"move(n-1,b,a,c)"。因此程序这么写: def move(n, a, b, c): if n == 1: print('move', a, '-->', c) else: move(n-1, a, c, b) move(1, a, b, c) move(n-1, b, a, c)