算法之刻画指定尺的刻度由次引发的简单汉诺塔代码实现

1.刻度尺递归优美实现

 1 # 画英式标尺,刻度线长度为 n 的 m 英寸标尺
 2 # 对于开始  L = 0,直接绘制 该刻度
 3 # 那么一般的情况有, 
 4 # 中央刻度 L >= 1 时 有
 5 # 一个中央刻度为 L-1 的刻度间隔
 6 # 一个中央刻度为 L 的间隔
 7 # 一个中央刻度为 L-1 的间隔
 8 # 设计思路: 分三个功能函数,一个构建整体的 刻度尺, 一个接受画几条刻度线, 一个输出 应该画几条刻度线
 9 
10 def draw_line(tick_length, tick_label=""): 11 """绘制刻度线 12 """ 13 14 line = "- " * tick_length 15 16 # 是否要添加数字 17 if tick_label: 18 line = "".join([line, str(tick_label)]) 19 20 # 输出 21 print(line) 22 23 24 def draw_interval(center_length): 25 """刻画中间刻度 26 """
27 if center_length > 0: 28 draw_interval(center_length - 1) # L-1 29 draw_line(center_length) # L 30 draw_interval(center_length - 1) # L-1 31 32 33 def draw_ruler(num_inches, major_length): 34 """构建刻度尺 35 """ 36 37 draw_line(major_length, "0") # L=0 38 39 for j in range(1, 1 + num_inches): # 从1开始迭代 40 draw_interval(major_length - 1) # 每一英寸的中间刻度绘制 41 draw_line(major_length, str(j)) # 每英寸的主刻度绘制

2.汉诺塔优美实现

# 汉诺塔 
# 当 n = 0 时,无意义
# 当 n = 1 时, a->c
# 当 n = 2 时, a->b, a->c, b->c
# 观查可知  整体的操作宏观上来讲是一个 a->c 的过程
# 当n>0时,无意义
# 一般情况为
# a->b
# a->c
# b->c

def fun(a, b, c, n): if n > 0: fun(a, c, b, n - 1) # a -> b print(f"第{i}次 {a}-->{c}") # a -> c fun(b, a, c, n - 1) # b -> c

 

转载于:https://www.cnblogs.com/xushouyi/p/11167038.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值