recursive generating
这个算法接受一个元素均不同的数组,通过递归的调用以生成所有全排列序列。
递归的原则在于,生成序列<a1,a2,…,an>的全排列P(a1,a2,…,an)等价于生成序列
<a1,P(a2,a3,…,an)>
<a2,P(a1,a3,…,an)>
…
<an,P(a1,a2,…,a{n-1})>
这构成了递归算法设计的deduction-case;而base-case,则是要生成全排列的序列只有一个元素。
整个算法大致上可以如下实现:
voidGenePermu(intA[],inti,intn)
{
if(i==n-1)
{
for(intk=0;k<n;++k)
{
cout<<A[k]<<" ";
}
cout<<endl;
return;
}
else
{
for(intk=i;k<n;++k)
{
swap(A[k],A[i]);
GenePermu(A,i+1,n);
swap(A[k],A[i]);
}
}
}
其中n表示序列中元素个数,i表示当前已处理过的(想象上)元素个数。