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

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

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的每个排列.

解决方法:

我不太熟悉python语法,但是假设python可以嵌套for语句,则下面的代码(在’c’中)应该不会太难翻译.

int list[3]={1,2,3};
int i,j,k;

for(i=0;i < SIZE;i++)
for(j=0;j < SIZE;j++)
for(k=0;k < SIZE;k++)
if(i!=j && j!=k && i!=k)
printf("%d%d%d\n",list[i],list[j],list[k]);
上一篇:python-生成带有括号和运算符的字符串列表的所有组合


下一篇:c-通过选择一些或所有字符生成所有排列的算法