Cantor设置代码未提供预期的输出

时间:2019-03-22 22:43:33

标签: python recursion

我在cantor set代码中有一些无法找到的错误。想法是,给定数字数组,您可以递归地删除中间元素的1/3,并在两侧递归并重复直到达到特定阈值。

这是代码

prepare

cantor(0,len(l)-1)

我得到超级奇怪的结果,不确定为什么...

enter image description here

2 个答案:

答案 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。