Discuss / Python / 漏了关键的思路,想了好久怎么按顺序打印出来的

漏了关键的思路,想了好久怎么按顺序打印出来的

Topic source

#1 Created at ... [Delete] [Delete and Lock User]

核心就是拆解,大问题拆成小问题,多层拆成最基本的2层,然后注意移动的目的地,也就是每一步要从哪移动到哪。

def move(n, a, b, c):    if n == 1:        print(a, '-->', c)    else:        move(n-1, a, c, b)         # N片拆解为第N片和第(N-1)片两部分,n - 1为1时才能移动,此时目的是a到b        move(1, a, b, c)           # n = 1,直接a移到c        move(n-1, b, a, c)         # 同上,一层时的移动目的是b到c#exp, n = 3时,进入else,卡在第一步move(2,a,c,b) 同时移动2片,无法进行,因此把这个操作再拆解,套用最初的n = 1的流程,这时a的目标不再是c而是b,因此交换符号即可# 也就是move(2,a,c,b)= move(1,a,b,c)| move(1,a,c,b) | move(1,c,a,b) 注:与最初的n=1不同之处在于这次move(2)的目的是a-->b,n = 1最初目的是a-->c,因此直接交换b,c符号完成到交换最终目标move(3, 'a', 'b', 'c')

#2 Created at ... [Delete] [Delete and Lock User]
def move(n, a, b, c):
  if n == 1:        
    print(a, '-->', c)    
  else:        
    move(n-1, a, c, b)         # N片拆解为第N片和第(N-1)片两部分,n - 1为1时才能移动,此时目的是a到b        
    move(1, a, b, c)           # n = 1,直接a移到c      
    move(n-1, b, a, c)         # 同上,一层时的移动目的是b到c#exp, n = 3时,进入else,卡在第一步move(2,a,c,b) 同时移动2片,无法进行,因此把这个操作再拆解,套用最初的n = 1的流程,这时a的目标不再是c而是b,因此交换符号即可# 也就是move(2,a,c,b)= move(1,a,b,c)| move(1,a,c,b) | move(1,c,a,b) 注:与最初的n=1不同之处在于这次move(2)的目的是a-->b,n = 1最初目的是a-->c,因此直接交换b,c符号完成到交换最终目标
move(3, 'a', 'b', 'c')

  • 1

Reply