递归算法求n个不同数的全排列(超级详细)
·
问题:求n个不同数的全排列,并打印输出。并求出有多少个全排列。
代码:
void static swap(int* M, int* N)//两数交换
{
int tem = *M;
*M = *N;
*N = tem;
}
//求若干个不同数的全排列
void f6(int a[], int k, int length)//k表示起始位置,length表示末尾位置
{
register int i = 0;
if (k == length)
{
for (i = 0; i <= length; i++)
{
printf("%d", a[i]);
}
printf("\n");
}
else
{
for (i = k; i <= length; i++)
{
swap(&a[k], &a[i]);
f6(a, k + 1, length);
swap(&a[k], &a[i]);
}
}
}
int main()
{
int a[] = {1,2,3,4,5};
int length = sizeof(a) / sizeof(a[0]) - 1;
f6(a, 0, length);
system("pause");
return 0;
}
测试结果:

至于全排列个数,很简单,就是n的阶乘,直接计算即可。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)