0

我需要递归地添加到字符串以使用 Lindenmayer 系统构建分形。无论如何,基本上我从String =“A”开始,每次我递归(即我从0深度开始并执行该过程的次数与深度相等)

我将“A”的每个实例更改为“BrArB”,将每个 B 更改为“AlBlA”。问题是,每次我做其中一个时,它都会增加另一个所做的,并搞砸算法。

我从“A”开始......应该去“BrArB”......然后应该有“AlBlArBrArBrAlBlA”

但在第三步中,我得到的比我应该得到的要多得多。

有什么建议么?如果我能同时做这两件事,问题就迎刃而解了。

4

1 回答 1

0

尝试使用地图:

grammar = {'A': 'BrArB', 'B': 'AlBlA'}

# number of rule substitutions
times = 8

# the starting point
axiom = 'A'

for n in xrange(times)
    axiom = sum( (list(grammar[c]) if c in grammar else [c] for c in axiom), [] )

axiom = ''.join(axiom)

最后,您可能希望通过使用过滤器消除每个非终端符号:

终端 = 'lrf'

axiom = ''.join(c for c in axiom if c in TERMINALS)

希望能帮助到你!

于 2012-12-14T01:21:58.710 回答