码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-07-10 23:11:52      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:操作   长度   一个   添加   code   ack   for   直接   意义   

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

 

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

标签:操作   长度   一个   添加   code   ack   for   直接   意义   

原文地址:https://www.cnblogs.com/xushouyi/p/11167038.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!