Python学习笔记(1)递归函数
贫僧使用的教程是廖雪峰老师的Python3教程。
只是笔记啦。主要是要记录一下做作业时遇到的问题。
定义:在它的内部调用它本身的函数,就是递归函数。
作业:使用递归函数实现有三个盘子的汉诺塔的移动。
期待输出:
A –> C
A –> B
C –> B
A –> C
B –> A
B –> C
A –> C
move(3, ‘A’, ‘B’, ‘C’)
代码:
def move(n, a, b, c)
if n == 1:
print(a, "-->", c)
else
move(n-1, a, c, b)
move(1, a, b, c)
move(n-1, b, a, c)
对作业的理解:
先将A柱子上最大的盘移动到C柱子,然后把第二大的盘子移动到C柱子上。。。直到把所有的盘子移动到C柱子上。
那么该怎么移动捏?每次只能移动一个盘子,而且小盘子不能放在大盘子上。
所以我们需要把某一根柱子当成辅助柱子用,暂时把碍事的盘子放在那里。
所以这里程序的步骤就应该是这样的:
- 把A上面最小的盘子放到C;
- 把A上面的第二小的盘子暂时放在辅助柱子B上;
- 把C柱子上的最小的盘子移动到B上;
- 把A最大的盘子移动到C柱子上;
- 把B柱子上最小的盘子移动到A柱子上;(把A柱子当作辅助柱子)
- 把B柱子上第二小的盘子移动到C柱子上;
- 把A柱子上最小的盘子移动到C柱子上;
所以可以总结出:每次移动都要把一个柱子暂时当作辅助柱子,把碍事的盘子(第1、2、5步)放上去,然后把要移动的盘子中最大的盘子移动到第三根柱子上去(3、6、7步)。
move (n-1, a, c, b)
代表的就是把柱子C当成辅助柱子,把盘子移动到柱子B上去
move (1, a, b, c)
把柱子A上的最后一个盘子移动到柱子C
move (n-1, b, a, c)
把柱子B上的盘子移动到C上,A作为辅助柱子。