我正在写一个递归函数,它将根据n创建桶

时间:2019-01-14 22:00:45

标签: python python-3.x

我正在编写一个递归函数,它将根据n创建空桶。但是我的代码不起作用。不管n是什么,它都不会打印。

有人可以帮助我解决我的问题吗?

例如,如果n为5,则应打印[[],[],[],[],[]]

def emptyBuckets(n):
        assert n > 0
        bucket = []
        # Base case: only one empty bucket
        if n == 1:
            return bucket
        else:
            return (bucket.append(emptyBuckets(n-1))

print (emptyBuckets(5))

2 个答案:

答案 0 :(得分:1)

您应该将递归调用的返回值放在字符串中,而不是用字符串括起来:

def emptyBuckets(n):
    return '[%s]' % emptyBuckets(n - 1) if n else ''

使emptyBuckets(5)返回:

[[[[[]]]]]

答案 1 :(得分:1)

保持与代码尽可能相似,以突出显示一些内容。

首先,当您定义类似bucket = []之类的内容时,是说bucket是一个空列表,而不是一对方括号。如果希望能够显示方括号,则应将bucket定义为字符串。

第二,您需要将递归返回包含在另一对括号中,再次以字符串的形式

def emptyBrackets(n):
    assert n > 0
    bucket = '[]'  # a string representing empty brackets
    if n == 1:  # base case
        return  bucket
    else:
        return f'[{emptyBrackets(n-1)}]'  # using fancy formatted strings

最后一行也可以是return '[{}]'.format(emptyBrackets(n-1))return '[' + emptyBrackets(n-1) + ']',或者作为另一个答案,您可以使用%运算符。个人喜好,但我最喜欢上面代码段中的那个。