我观看了有关汉诺塔的视频,并按照说明创建了解决该问题的脚本。代码运行得很好,但我想在函数中添加一个计数器,以便我可以使用索引打印每个步骤,以便后续操作。
我尝试使用全局变量来计算递归函数被调用的次数,并使用这个计数作为我的索引,但仍然无法让它正常工作......我在这里做错了什么?
count = 0
def tower(n, start, end, middle):
global count
if n == 1:
count += 1
print('%i - Coloque o disco %i do pino %s no pino %s' % (count, n, start, end))
else:
count += 1
tower(n - 1, start, middle, end)
print('%i - Coloque o disco %i do pino %s no pino %s' % (count, n, start, end))
tower(n - 1, middle, end, start)
tower(5, 'A', 'C', 'B')
现在输出是这样的:
5 - Coloque o disco 1 do pino A no pino C
5 - Coloque o disco 2 do pino A no pino B
6 - Coloque o disco 1 do pino C no pino B
6 - Coloque o disco 3 do pino A no pino C
8 - Coloque o disco 1 do pino B no pino A
8 - Coloque o disco 2 do pino B no pino C
9 - Coloque o disco 1 do pino A no pino C
9 - Coloque o disco 4 do pino A no pino B
12 - Coloque o disco 1 do pino C no pino B
12 - Coloque o disco 2 do pino C no pino A
13 - Coloque o disco 1 do pino B no pino A
13 - Coloque o disco 3 do pino C no pino B
15 - Coloque o disco 1 do pino A no pino C
15 - Coloque o disco 2 do pino A no pino B
16 - Coloque o disco 1 do pino C no pino B
16 - Coloque o disco 5 do pino A no pino C
20 - Coloque o disco 1 do pino B no pino A
20 - Coloque o disco 2 do pino B no pino C
21 - Coloque o disco 1 do pino A no pino C
21 - Coloque o disco 3 do pino B no pino A
23 - Coloque o disco 1 do pino C no pino B
23 - Coloque o disco 2 do pino C no pino A
24 - Coloque o disco 1 do pino B no pino A
24 - Coloque o disco 4 do pino B no pino C
27 - Coloque o disco 1 do pino A no pino C
有人可以解释一下为什么计数器没有按照我预期的方式工作吗?
最佳答案
问题是,当你有 n == 1 时,你就开始打印东西,因为它是递归,但每次调用递归时你都会添加计数。
您可以通过将计数添加到 else 语句中的打印之前来解决此问题,如下所示:
count = 0
def tower(n, start, end, middle):
global count
if n == 1:
count += 1
print('%i - Coloque o disco %i do pino %s no pino %s' % (count, n, start, end))
else:
tower(n - 1, start, middle, end)
count += 1
print('%i - Coloque o disco %i do pino %s no pino %s' % (count, n, start, end))
tower(n - 1, middle, end, start)
tower(5, 'A', 'C', 'B')
它将输出如下:
1 - Coloque o disco 1 do pino A no pino C
2 - Coloque o disco 2 do pino A no pino B
3 - Coloque o disco 1 do pino C no pino B
4 - Coloque o disco 3 do pino A no pino C
5 - Coloque o disco 1 do pino B no pino A
6 - Coloque o disco 2 do pino B no pino C
7 - Coloque o disco 1 do pino A no pino C
8 - Coloque o disco 4 do pino A no pino B
9 - Coloque o disco 1 do pino C no pino B
10 - Coloque o disco 2 do pino C no pino A
11 - Coloque o disco 1 do pino B no pino A
12 - Coloque o disco 3 do pino C no pino B
13 - Coloque o disco 1 do pino A no pino C
14 - Coloque o disco 2 do pino A no pino B
15 - Coloque o disco 1 do pino C no pino B
16 - Coloque o disco 5 do pino A no pino C
17 - Coloque o disco 1 do pino B no pino A
18 - Coloque o disco 2 do pino B no pino C
19 - Coloque o disco 1 do pino A no pino C
20 - Coloque o disco 3 do pino B no pino A
21 - Coloque o disco 1 do pino C no pino B
22 - Coloque o disco 2 do pino C no pino A
23 - Coloque o disco 1 do pino B no pino A
24 - Coloque o disco 4 do pino B no pino C
25 - Coloque o disco 1 do pino A no pino C
26 - Coloque o disco 2 do pino A no pino B
27 - Coloque o disco 1 do pino C no pino B
28 - Coloque o disco 3 do pino A no pino C
29 - Coloque o disco 1 do pino B no pino A
30 - Coloque o disco 2 do pino B no pino C
31 - Coloque o disco 1 do pino A no pino C
关于python - 递归函数内的全局计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69668099/