python汉诺塔问题

@python汉诺塔问题
##python汉诺塔问题
@[TOC](汉诺塔问题)

# 问题描述

## 具体代码

### 代码细节

#问题描述
汉诺塔问题大家都清楚,这里不再赘述。,完成如功能:
有三个圆柱 A、B、C,初始时 A 上有 N 个圆盘,N 由用户输入给出,最终移动到圆柱 C 上。
每次移动步骤的表达方式示例如下:[STEP 10] A->C。其中,STEP 是步骤序号,宽度为 4 个字符,右对齐。
请编写代码,获得输入 N 后,输出汉诺塔移动的步骤。
样例输入和输出:
输入:"3"
【样例输出】
输出:"
[STEP 1] A->C 
[STEP 2] A->B
[STEP 3] C->B 
[STEP 4] A->C 
[STEP 5] B->A 
[STEP 6] B->C 
[STEP 7] A->C
##具体代码

```python
def hanoi(src, des, mid, n):
    steps=0
    if n == 1:
        steps+=1
        print("[STEP{:>4}] {}->{}".format(steps, src, des))
    else:
        hanoi(src,mid,des,n-1)
        steps+=1
        print("[STEP{:>4}] {}->{}".format(steps, src, des))
 
        hanoi(mid,des,src,n-1)
N = eval(input())
hanoi("A", "C", "B", N)

```

###代码细节
汉诺塔的函数里面要传入4个参数,n即为有几个移动的盘,开始的塔,目标塔,中间辅助的塔。每次的递归即是变换参数的值。

```python
def hanoi(src, des, mid, n):
```

1,函数中有两个情况
(1)如果只有一个盘子,则不需要利用B座,直接将盘子从A移动到C,在移动过程中可以不利用B座
(2)将最大盘子上面的n-1个盘子通过C为辅助盘移到B,B上的n-1个盘子由A为辅助盘移动C。(n-1个盘子的移动泽根据递归来实现)所以汉诺塔问题的递归终止条件即是A座上只有一个盘子
2,输出移动次数时,要求的宽度为4个字符,右对齐用{:>4}去实现

```python
print("[STEP{:>4}] {}->{}".format(steps, src, des))
```

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值