递归函数
放寒假继续学习,想做可重复使用元素的全排列结果做不出来,请问怎么使用递归函数算出来。。。我希望达到可以输入排列位数和元素,计算出所有的排列这样的结果,但是现在做出来的东西要根据位数不同自己改代码,这个是我做的,只能算三位时的情况。就是说通过一个递归函数(也可以是别的方法)让电脑自动计算4位5位时的所有排列,谢谢,祝大家新年快乐。#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<conio.h>
main()
{
FILE *p;
int a,d,e,g,h,i,j,l=0,m,n,o,x=0;
char b[129];
char c;
p=fopen ("d:\\pailie.dat","w+");
printf("输入排列位数\n");
scanf("%d",&a);//a为位数
c=getchar();//字符c吸收回车符,不然就必须先输入字符串再输入数字
printf("输入组成排列的数字字母和符号,每个符号只输入一次,不以空格分隔(空格是符号)\n");
gets (b); //b这个字符串为构成排列的数字字母和符号,129是ascii字符集的127(从0到127)加2个
e=strlen (b);//e为构成排列的数字字母和符号的个数
d=pow (e,a);//d为相异元素(数字字母符号)可以重复排列时的需要计算的最大次数(就是元素可以重复排列时的排列数)
for(h=0;h<e;h++)
{
for(g=0;g<e;g++)
{
for(i=0;i<e;i++)
{
putchar (b[h]);
fputc (b[h],p);
putchar(b[g]);
fputc (b[g],p);
putchar (b[i]);
fputc (b[i],p);
printf("\n");
fputc ('\n',p);
}
}
}
}