我在cantor set代码中有一些无法找到的错误。想法是,给定数字数组,您可以递归地删除中间元素的1/3,并在两侧递归并重复直到达到特定阈值。
这是代码
prepare
cantor(0,len(l)-1)
我得到超级奇怪的结果,不确定为什么...
答案 0 :(得分:1)
一个棘手的问题-我计算了片段并将其递归压缩到一个数组中,然后将其转储到终端:
from math import log
def cantor(length, threshold):
if length >= threshold:
sequence = cantor(length // 3, threshold)
blanks = [" " * (length // 3)] * int(log(length, 3) + 1) # estimate and let zip toss extras
return ["*" * length] + [a + b + c for a, b, c in zip(sequence, blanks, sequence)]
return []
length = 81
threshold = 1
print(*cantor(length, threshold), sep='\n')
输出
> python3 test.py
*********************************************************************************
*************************** ***************************
********* ********* ********* *********
*** *** *** *** *** *** *** ***
* * * * * * * * * * * * * * * *
>
答案 1 :(得分:0)
我认为您应该更改从最后到第一个切片的处理顺序,因为递归到较低的索引将使先前递归对lowi和hi的位置无效:
cantor(lowi+1, hi)
cantor(lo, lowi)
cantor(0, len(l)-1)
您可能要检查下标中范围的结尾,因为范围的结尾是排他的。即l [2:7]不包含索引#7。