【发布时间】:2020-12-25 13:09:34
【问题描述】:
我编写了一些 python 代码以递归方式获取所有子集。
如果给定数据
data = [1,2,3,4,5]
length = 3
结果将以 3 长度打印所有子集 像这样
1,2,3
1,2,4
1,2,5
2,3,4
2,3,5...
这是我的代码
data = [1,2,3,4,5]
n = 5
r = 3
templist = []
def re(max,length,idx):
if idx == max:
return
if idx == length:
for i in templist:
print(" "+str(i))
print("\n")
return
else:
templist.append(data[idx])
re(max,length,idx+1)
templist.pop()
re(max,length,idx+1)
if __name__ == "__main__":
re(n,r,0)
我的期望是循环所有可能的子集
但是当它遇到调用时它会失败
re(max,length,idx+1)
后
temlist.pop()
当代码进入第二个re()函数时
我希望它附加templist.append(data[4])
因为第一个 re() 函数由 if 条件返回
if idx == length:
当idx 为3 时,idx 与长度(3) 相同。
所以递归结束,运行temlist.pop()和
它将进入第二个re(4)函数
因为我编码了idx+1
但它会失败
idx只能在2~3之间圈出来
所以我改变了第二个递归函数
re(max,length,idx+1)
到
re(max,length,idx+2)
我彻底崩溃了。
我认为我提出的逻辑大错特错。 但我不知道在哪里解决它如何解决我所期望的调用递归?
【问题讨论】:
-
你知道 Python 自带了a module 用于permutations 和combinations?
标签: python algorithm recursion subset tail-recursion