我正在尝试使用递归函数来简化下面的“for循环”,对于任何数量的循环,我可能需要根据需求运行程序。我可以定义一个递归函数而不用I,j,k,l。。。。但是我不知道或者我很难用I,j,k来定义一个迭代函数。。。 如果有人能帮我想象一下,我会很高兴的。你知道吗
adjcent_spin_product_matrix = []
z_partial = 0
spin = [-1, 1]
for i in spin:
for j in spin:
for k in spin:
for l in spin:
for m in spin:
for o in spin:
for p in spin:
adjcent_spin_product_matrix = adjcent_spin_product_matrix + [i*j+ j*k+ k*l+ l*n+ m*o+ o*p]
不需要特别的递归函数。你知道吗
如果使用
itertools.product
,则可以对每个索引数使用单个循环;也可以使用sum
和zip
简化计算如果不想使用递归函数来实现这一点,那么可以使用stack。将循环的每一级推到堆栈中,以便以后可以将它们弹出。你知道吗
堆栈是大多数语言中的基本数据结构,因为它是存储函数调用上下文的一种非常自然的方式,也是堆栈溢出的由来。你知道吗
我之前的回答是反对你未经编辑的帖子,所以这里有一个更新:
根据您提供的代码,很明显您必须至少有
i
和j
的循环。你知道吗单独评估该循环会得到以下列表:
[1, -1, -1, 1]
现在,代码中的每个后续嵌套循环只会复制此列表中的每个元素,然后添加上一个循环中的数组(重复两次):
i、j和k循环给出
[1, 1, -1, -1, -1, -1, 1, 1] + [1, -1, -1, 1, 1, -1, -1, 1] = [2, 0, -2, 0, 0, -2, 0, 2]
i、j、k和l循环给出
[1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1] + [1, 1, -1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, 1, 1] + [1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1] = [3, 1, -1, 1, -1, -3, -1, 1, 1, -1, -3, -1, 1, -1, 1, 3]
等等。。。你知道吗
因此,您可以简单地尝试以下操作:
现在,你应该发现:
它们给出了预期的结果:
相关问题 更多 >
编程相关推荐