gpt4 book ai didi

python - 如何重写递归函数以使用循环代替?

转载 作者:太空宇宙 更新时间:2023-11-04 11:01:05 24 4
gpt4 key购买 nike

这个堆栈溢出线程声称每个递归函数都可以写成一个循环。

Which recursive functions cannot be rewritten using loops?

这是完全有道理的。但我不确定如何将以下递归函数表示为循环,因为它具有前递归逻辑和后递归逻辑。

显然解决方案不能使用 goto 语句。代码在这里:

def gen_perms(lst, k, m):

if k == m:
all_perms.append(list(lst))
else:
for i in xrange(k, m+1):

#swap char
tmp = lst[k]
lst[k] = lst[i]
lst[i] = tmp

gen_perms(lst, k+1, m)

#swap char
tmp = lst[k]
lst[k] = lst[i]
lst[i] = tmp

调用它会是这样的:

all_perms = []
gen_perm([1, 2, 3], 0, 2)

它生成列表 1,2,3 的每个排列。

最佳答案

进行排列的最 pythonic 方式是使用:

>>> from itertools import permutations
>>> permutations([1,2,3])
>>> list(permutations([1,2,3]))
[(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]

关于python - 如何重写递归函数以使用循环代替?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5330248/

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