Python数据结构与算法40:递归编程练习题3:ASCII谢尔宾斯基地毯

:本文如涉及到代码,均经过Python 3.7实际运行检验,保证其严谨性。

本文阅读时间约为7分钟

递归编程练习题3:ASCII谢尔宾斯基地毯
谢尔宾斯基地毯

谢尔宾斯基地毯是形如上图的正方形分形图案,每个地毯可分为等大小的9份,其中中央挖空,其余均由更小的地毯组成。

现给定地毯大小(行数)与组成地毯的字符元素,请打印相应的地毯图形。

注:空腔以半角空格表示;当给定字符元素长度不为1时空格数须与字符长度对应。

输入格式:

输入为两行,分别为地毯的边长,即组成地毯的元素的个数——正整数N,以及组成地毯的元素——字符串c。

输入数据保证N为3的正整数幂。

输出格式:

由N行长度为N*len(c)的字符串构成的谢尔宾斯基地毯。

输入样例:

9
[]

输出样例:

[][][][][][][][][]
[]  [][]  [][]  []
[][][][][][][][][]
[][][]      [][][]
[]  []      []  []
[][][]      [][][]
[][][][][][][][][]
[]  [][]  [][]  []
[][][][][][][][][]

参考程序模板:

def carpet(N,char):
    # code here
    pass
 
n=int(input())
c=input()
carpet(n,c)

解答:这里主要是用递归解决问题。关键在于对于一个最小的条件来说,哪里填充空格符(即挖空),哪里填充字符串c。

我们可以通过设定坐标系及坐标(x, y)一样的东西来精准控制何处该填充空格符还是字符串c。

拿下面最简单的一个3 * 3的谢尔宾斯基地毯来说,坐标(x, y)可以精确表示途中任意一处。例如当x = 0,y = 0时,即坐标(0, 0)表示左上角第一个'[]',而坐标(1, 1)则表示谢尔宾斯基地毯挖空的那个部分,也就是填充了空格符的那一个位置。

[][][]
[]  []
[][][]

那么,如何在程序中实现(x, y)坐标的模拟呢?双重for循环就是我们要找的工具:

for x in range(N):
    for y in range(N):

最后,别忘了换行符'\n'的使用。

参考代码及详细注释如下:

def carpet(N, c):
    # 以x,y为坐标点,来判断什么坐标位置填充字符串c以及什么位置填充空格符(即挖空)。
    def judge(n, x, y):
        if n == 1:
            return True  # 符合True条件的(x, y)坐标点填充字符串c。
        n1 = n // 3
        if n1 <= x < n1 * 2 and n1 <= y < n1 * 2:
            return False  # 符合False条件的(x, y)坐标点填充空格符。
        return judge(n1, x % n1, y % n1)  # 递归继续判断,直到满足基本结束条件为止。
 
    d = ''  # 创建一个变量d,用来展示最后完成的谢尔宾斯基地毯。字符串形式。
    
    for x in range(N):
        for y in range(N):
            if judge(N, x, y):
                d += c
            else:
                d += (len(c) * ' ')
        d = d + '\n'  # 这里有个换行符。
        
    return d
 
N = int(input())
c = input()

print(carpet(N, c))


<<<
9

()
()()()()()()()()()
()  ()()  ()()  ()
()()()()()()()()()
()()()      ()()()
()  ()      ()  ()
()()()      ()()()
()()()()()()()()()
()  ()()  ()()  ()
()()()()()()()()()
<<<

To be continued.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,233评论 6 495
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,357评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,831评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,313评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,417评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,470评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,482评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,265评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,708评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,997评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,176评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,827评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,503评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,150评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,391评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,034评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,063评论 2 352

推荐阅读更多精彩内容