参考代码的含义
参考代码中
“move(n-1, a, c, b)
print a, '-->', c
move(n-1, b, a, c)”
这一段的含义我不明白,有下面几个问题
1,print a, '-->', c中的 “a”与“c” 在“move(n-1, a, c, b)”这行代码中分别是后者的‘a’与‘b’吗?
2,第一行的n-1与第三行的n-1是不是同一个数字?
3,这两个move是如何实现循环运算的?
参考代码中
“move(n-1, a, c, b)
print a, '-->', c
move(n-1, b, a, c)”
这一段的含义我不明白,有下面几个问题
1,print a, '-->', c中的 “a”与“c” 在“move(n-1, a, c, b)”这行代码中分别是后者的‘a’与‘b’吗?
2,第一行的n-1与第三行的n-1是不是同一个数字?
3,这两个move是如何实现循环运算的?
2018-07-03
def move(n, a, b, c): if n == 1: #如果a只有一个圆盘,可以直接移动到c; print(a ,'->', c) return else: move(n-1,a,c,b) #首先需要把 (N-1) 个圆盘移动到 b move(1,a,b,c) #将a的最后一个圆盘移动到c move(n-1,b,a,c) #再将b的(N-1)个圆盘移动到c move(4, 'A', 'B', 'C')
这个问题之前也是困扰了我很久,仔细琢磨一下,还是可以理解的,这个例子对于理解递归函数是很不错的。
首先,假设,这个函数只解决了一个问题,就是只有一个盘子的情况下,A——>C。
递归函数就是要不断的调用函数自身,以达到将问题化整为零,最小段进行解决。也就是,就算有N个盘子,也要进行自身调用,将N个盘子的情况,至变成N个1个盘子的情况下,进行解决。
在整个变化中,唯一始终不变的就是n==1的情况A——>C,既然如此,对于变化就要在else中对需要变换的位置进行调换。例如
move(n-1 , a , c , b) #第一个N-1的情况进行调用的时候 | | | | #上下对比可以看出,b出现在了固定参数c的位置
move( n , a , b , c) #调用的N=1的情况,固定参数位置
然而 N=1的情况下结果就是
print(a ,'->', c)
由此看出,最后运行的结果就是 A——>B,如此就符合了第一个出现的N-1的情况,以此类推。
举报