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

Posted xushouyi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法之刻画指定尺的刻度由次引发的简单汉诺塔代码实现相关的知识,希望对你有一定的参考价值。

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

 

以上是关于算法之刻画指定尺的刻度由次引发的简单汉诺塔代码实现的主要内容,如果未能解决你的问题,请参考以下文章

python算法之汉诺塔

python汉诺塔非递归

分治算法——汉诺塔问题

递归3之汉诺塔的实现

python3汉诺塔简单实现代码

从汉诺塔问题来看“递归”本质