算法之刻画指定尺的刻度由次引发的简单汉诺塔代码实现
2020-12-13 06:07
标签:操作 长度 一个 添加 code ack for 直接 意义 算法之刻画指定尺的刻度由次引发的简单汉诺塔代码实现 标签:操作 长度 一个 添加 code ack for 直接 意义 原文地址:https://www.cnblogs.com/xushouyi/p/11167038.html1.刻度尺递归优美实现
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
文章标题:算法之刻画指定尺的刻度由次引发的简单汉诺塔代码实现
文章链接:http://soscw.com/index.php/essay/32490.html