求c语言递归输出循环数,比如输出一组数为:0123456,1234560,2345601依次类推
排列的递归,程序参考:
#include <stdio.h>
#define MaxN 10
int used[MaxN];
int p[MaxN];
char s[MaxN]="0123456"; //输出字串
static int count=0;
//从n个元素中选r个进行排列
void permute(int pos,const int n,const int r)
{
int i;
/*如果已是第r个元素了,则可打印r个元素的排列 */
if(pos == r)
{
printf("%c",s[p[0]]);
for(i=1; i<r; i++)
printf("%c",s[p[i]]); //中间用"-"隔开
printf("
");
count++;
return;
}
for (i=0; i<n; i++)
{
if(!used[i])
{
/*如果第i个元素未用过*/
/*使用第i个元素,作上已用标记,目的是使以后该元素不可用*/
used[i]=1;
/*保存当前搜索到的第i个元素*/
p[pos] = i;
/*递归搜索*/
permute(pos+1,n,r);
/*恢复递归前的值,目的是使以后改元素可用*/
used[i]=0;
}
}
}
int main()
{
permute(0,7,7);
printf("Total=%d
",count );
return 0;
}