如何优化内存以使程序运行得更快?
我刚刚开始学习递归问题,还不理解它们。 例如这个问题 例如,假设集合R={r1,r2,...,rn}由n个要排列的元素组成,其中r1,r2,...,rn可以相同。尝试设计一个算法来列出 R 的所有不同排列。也就是说,给定 n 和 n 个可能重复的要排列的元素,计算并输出 n 个元素的所有不同排列。
#include<stdio.h>
int num=0;
//交换函数
void swap(char &a,char &b)
{
char temp;
temp=a;
a=b;
b=temp;
}
//判断函数,判断两个字符是否相等,相同返回1,不用交换,反之返回0,交换
int ok(char list[],int i,int j)
{
if(j>i)
{
for(int t=i;t<j;t++)
{
if(list[t]==list[j])
{
return 1;
}
}
}
return 0;
}
//递归函数
void perm(char list[],int n,int m)
{
if(n==m)
{
num++;
for(int i=1;i<=m;i++)
{
printf("%c",list[i]);
}
printf("\n");
}
else
{
for(int i=n;i<=m;i++)
{
if(!ok(list,n,i))
{
swap(list[n],list[i]);
perm(list,n+1,m);
swap(list[n],list[i]);
}
//两次交换又给换回去了
}
}
}
//主函数
int main()
{
int n;
scanf("%d",&n);
char s[100];
for(int i=0;i<=n;i++)
{
scanf("%c",&s[i]);//存到数组1—n里面
}
perm(s,1,n);
printf("%d\n",num);`enter code here`
return 0;
}