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

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作为辅助柱子。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值