gpt4 book ai didi

python - 在python中生成排列时如何阻止堆栈溢出

转载 作者:太空宇宙 更新时间:2023-11-03 11:00:26 24 4
gpt4 key购买 nike

我试图在不使用 itertools 的情况下在 python 中生成排列。到目前为止,这是我的代码:

def generatePermutations(minVal, maxVal, arrayLength, depth = -1, array = []):
if(depth == -1): # set all values to minVal initially
for i in range(arrayLength):
array.append(minVal)
depth += 1
generatePermutations(minVal, maxVal, arrayLength, depth, array) # recurse

elif depth < arrayLength:
a.append(array[:]) # a is a list declared above the function

current = 0
while current <= depth:
if array[current] < maxVal:
array[current] += 1
break
else:
if current < depth:
array[current] = minVal
else:
depth += 1
array[current] = minVal
if depth < arrayLength:
array[depth] += 1
break
current += 1

generatePermutations(minVal, maxVal, arrayLength, depth, array)

该函数适用于一组足够小的数字。例如,generatePermutations(1,2,2) 使用以下内容填充列表 a:

[1, 1]
[2, 1]
[1, 2]
[2, 2]

但是,当我尝试创建长度为 9 的数组的排列 (generatePermutations(1,9,9)) 时,我在函数完成之前很久就遇到了堆栈溢出错误。有什么办法可以避免这种情况吗?

最佳答案

我做了一些测试,我发现您的函数设置方式,它会为每个排列 调用自身。如同,递归深度与到目前为止生成的排列数相同。当您尝试执行 generatePermutations(1,9,9) 时,Python 会尝试递归到 9!=362880 层级,这太深了(仅限于 1000)。

相反,重构您的代码,以便迭代 a 中的每个元素,附加当前数字,并在每个数字的循环中执行此操作。这样,递归只需深入 9 层。

关于python - 在python中生成排列时如何阻止堆栈溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33887031/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com