我正在将代码库中的一些递归调用转换为迭代。多亏了this blog和this question,这一点非常简单。然而,下面的模式(作为一个最小的例子)让我很难接受。它基本上给出了n^m
位置上n
个数的m
置换(重复)(此处n=4
,m=3
):
def f (i, arr):
if i < len(arr):
for j in [2,3,5,8]:
arr[i] = j
f(i+1, arr)
else:
print(arr)
f(0, [0,0,0])
哪些产出:
[2, 2, 2]
[2, 2, 3]
[2, 2, 5]
...
[8, 8, 3]
[8, 8, 5]
[8, 8, 8]
根据this discussion,这应该是可能的。如果有人能分享一些关于如何进行这一转换的指导,那将是非常好的
从代码中退一步,考虑一下您试图在这里生成的模式可能会有所帮助。例如,假设每个插槽有十个数字选项可供选择,它们是0、1、2、…、9。在这种情况下,您所做的基本上是从000开始向上计数,直到最终达到999。你是怎么做到的?嗯:
在你的例子中,数字是2、3、5和8,但这并不重要
对于列出从k个选项列表中提取n个符号的所有方法的更一般问题,您可以将其转化为一个很好的过程:
相关问题 更多 >
编程相关推荐