我正在尝试编写一个采用数字n和某个值(例如'a'
)的递归函数,并以递归方式构建一个由n
'a'
组成的列表。
因此,func(4, 'a')
返回['a','a','a','a']
。
到目前为止,我的互联网搜索令人惊讶地徒劳。我发现的大多数列表递归示例都带有附加参数。
我尝试了以下代码的各种版本:
def func(n, a):
if n == 1:
return [a]
else:
return func(n-1, a).append(a)
在最后一次返回时,我不断遇到cannot append to NoneType
错误。因此func(n-1,a)
返回None
。
答案 0 :(得分:2)
list.append
仅返回None
,因为其目的是就地更新目标列表。无需添加,只需添加:
def func(n, a):
if n == 1:
return [a]
else:
return func(n-1, a) + [a]
print(func(4, 'a'))
输出:
['a', 'a', 'a', 'a']
另外,您可能要考虑使用生成器来提供更清晰(或更短)的结果:
def func(n, a):
if n:
yield a
yield from func(n-1, a)
print(list(func(4, 'a')))
输出:
['a', 'a', 'a', 'a']
答案 1 :(得分:0)
它必须是递归的吗?
def func(n,a): a_list = [] 对于我在范围(n)中: a_list.append(str(a)) 返回a_list
答案 2 :(得分:0)
由于list.append
方法返回None
,因此,如果要使用append
方法,则必须这样做:
def func(n, a):
if n == 1:
return [a]
else:
temp = func(n-1, a)
temp.append(a)
return temp
print(func(5, 'a'))
打印:
['a', 'a', 'a', 'a', 'a']