<p>我正在研究一种最终具有分形性质的模式。我编写了一个函数来处理n=4的情况。它看起来像这样:</p>
<pre><code> def enumerate_pattern(vector, n):
path_len = len(vector)
output = []
for x in range(path_len-(n-1)):
s1 = shifter(vector, 0, x)
for y in range(path_len-(x+(n-1))):
s2 = shifter(s1, x+1, y)
for z in range(path_len-(x+y+(n-1))):
s3 = shifter(s2, x+y+2, z)
for w in range(path_len-(x+y+z+(n-1))):
s4 = shifter(s3, x+y+z+3, w)
some_function(s4) #which fills output
return output
</code></pre>
<p>我试图把它推广到任何n,但我有一个困难的时候。有一种模式,但有点复杂。我在这个网站上找到了一个固定范围长度的递归解决方案,并试图使其适应我的情况</p>
<pre><code>def loop_rec(y, n):
if n >= 1:
for x in range(y):
loop_rec(y, n - 1)
else:
whatever()
</code></pre>
<p>在我的例子中,whatever()应该对应于某个函数(s4)。但我不知道如何使范围随每个级别而变化。第i级的For循环如下所示:</p>
<pre><code>for L_i in range(path_len - (L_1+L_2+L_3+...+L_(i-1)+(n-1))):
s_i = shifter(s_(i-1), L_1+L_2+L_3+...+L_(i-1)+(i-1), L_i)
</code></pre>
<p>可以将变化部分作为参数携带</p>
<pre><code>def loop_rec(y, n, to_subtract=0):
if n >= 1:
for i in range(y - (to_subtract + (n - 1))):
loop_rec(y, n - 1, to_subtract + i)
else:
whatever()
</code></pre>