这个堆栈溢出线程声称每个递归函数都可以写成一个循环.
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]);