我正在编写一个递归函数,它将根据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))
答案 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) + ']'
,或者作为另一个答案,您可以使用%
运算符。个人喜好,但我最喜欢上面代码段中的那个。