Python学习笔记(1)递归函数

时间:2021-10-24 03:15:25

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柱子上。

那么该怎么移动捏?每次只能移动一个盘子,而且小盘子不能放在大盘子上。

所以我们需要把某一根柱子当成辅助柱子用,暂时把碍事的盘子放在那里。

所以这里程序的步骤就应该是这样的:

  1. 把A上面最小的盘子放到C;
  2. 把A上面的第二小的盘子暂时放在辅助柱子B上;
  3. 把C柱子上的最小的盘子移动到B上;
  4. 把A最大的盘子移动到C柱子上;
  5. 把B柱子上最小的盘子移动到A柱子上;(把A柱子当作辅助柱子)
  6. 把B柱子上第二小的盘子移动到C柱子上;
  7. 把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作为辅助柱子。