如何制作递归函数来生成数字的组合,例如.对于n=3,(1,1,1)(1,1,2)等等?


def generate(n):
t=[]
lol=[[] for i in range(n**n)]
helper(n,t,lol)
return(lol)
def helper(n,t,lol):
global j
if len(t)==n:
lol[j]=lol[j]+t 
j += 1
return

for i in range(1,n+1):
print(i)
t.append(i)
helper(n,t,lol)
t.pop()
j=0
print(generate(2))
print(generate(3))

这里,对于n=2,我得到的是预期的答案。但如果n=3,则显示Index Error:

in helper
lol[j]=lol[j]+t 
IndexError: list index out of range

试试下面的代码:

def generate(n):
def helper(m, n, s):
if m==0:
print(s)
else:
for x in range(1,n+1):
helper(m-1, n, s+[x])
assert n>=1
helper(n, n, [])

例子:

>>> generate(1)
[1]
>>> generate(2)
[1, 1]
[1, 2]
[2, 1]
[2, 2]
>>> generate(3)
[1, 1, 1]
[1, 1, 2]
[1, 1, 3]
[1, 2, 1]
[1, 2, 2]
[1, 2, 3]
[1, 3, 1]
[1, 3, 2]
[1, 3, 3]
[2, 1, 1]
[2, 1, 2]
[2, 1, 3]
[2, 2, 1]
[2, 2, 2]
[2, 2, 3]
[2, 3, 1]
[2, 3, 2]
[2, 3, 3]
[3, 1, 1]
[3, 1, 2]
[3, 1, 3]
[3, 2, 1]
[3, 2, 2]
[3, 2, 3]
[3, 3, 1]
[3, 3, 2]
[3, 3, 3]
>>> 

相关内容

最新更新