求助:函数递归时,参数的位置变换问题(例题:汉诺塔)
源代码如下:def move(n, a, b, c):#①
if n == 1:
print(a,'1--->', c)
else:
move(n-1, a, c, b)#②
print(a, '2--->', c)
move(n-1, b, a, c)
move(3, 'A', 'B', 'C')
描述:
当参数传入时,参数的顺序是(n, a, b, c),也就是 ①处
执行到②处函数进行递归时,传入的参数顺序是(n, a, b, c),从②到①会重新对参数位置顺序排序吗?
内部的执行过程:
n = 3 ,a = 'A',b = 'B',c = 'C'
n = 2 ,a = 'A',b = 'C',c = 'B'
n = 1 ,a = 'A',b = 'B',c = 'C'
问题:
从n的值从2变到1的时候,后面b和c的参数变化不是很理解,求助大佬解答一下疑惑。
不就是 b 和 c 调换了位置嘛? 求解加一,三层就把我绕晕了 ngh888 发表于 2020-7-31 23:15
求解加一,三层就把我绕晕了
是的,第三层的参数位置变换把我绕晕了。我怎么理都理不清楚。先静一静,一会儿再理一下试试,看能不能自己理清楚。有大佬能来帮忙快速解答就更棒了。 永恒的蓝色梦想 发表于 2020-7-31 23:12
不就是 b 和 c 调换了位置嘛?
我知道换了位置,就是这个第三层,怎么换的,有点晕。能解释一下吗?
n=2的时候,进行再次递归。
传入前,参数的顺序应该是(n=2,a='A',c='B',b='C') --- a c b
传入后,参数的顺序应该是(n=2,a='A',b='C',c='B') --- a b c
n=1
传入前,参数的顺序是(n=1, a='A', c='C', b='B')--- a c b
传入后,参数的顺序是(n=1, a='A', b='B', c='C')--- a b c
是这样理解的吗? 超过光速c 发表于 2020-7-31 23:34
我知道换了位置,就是这个第三层,怎么换的,有点晕。能解释一下吗?
n=2的时候,进行再次递归。
什么叫 传入前 和 传入后 ? 而且我还没看懂为啥会打印七次 永恒的蓝色梦想 发表于 2020-7-31 23:48
什么叫 传入前 和 传入后 ?
嗯……你看一下我上传的代码,我在后面备注了①和②的位置,它们的参数位置。 ngh888 发表于 2020-8-1 10:11
而且我还没看懂为啥会打印七次
呃呃,7次就是,最简的步骤呀。
把1和2当成整体,全都移到b柱上,然后把3移动到c柱上,再把b柱上的1和2全都移动到c柱上。
次数的公式的话就是: 2**n - 1(2的n次方 减 1 )
页:
[1]