我写的一个用递归方法实现输出全排列的小程序: #include<stdio.h> #include<stdlib.h> #define N 20
int nminus(int a[N+1][N+1],int b[N+1],int n,int num) { int i,j; if(n==num) { printf("n2 is %d.\n",n); for(i=1;i<=num;i++) if(a[n][i]!=0) break; b[n]=a[n][i]; for(i=1;i<num+1;i++) printf("--%d ",b[i]); printf("\n"); return 1; } else for(i=1;i<num+1;i++) if(a[n][i]>b[n]) { printf("n1 is %d.\n",n); b[n]=a[n][i]; for(i=n+1;i<num+1;i++) b[i]=0;
for(i=n+1;i<num+1;i++) for(j=1;j<num+1;j++) a[i][j]=j;
for(j=1;j<num+1;j++) if(a[n][j]==0||a[n][j]==b[n]) for(i=n+1;i<num+1;i++) a[i][j]=0; nminus(a,b,n+1,num); return 1; } return 1; }
main()
{ int i,j; int a[N+1][N+1],b[N+1],num; printf("Please input the number:\n"); scanf("%d",&num); //初始化数组;
for(i=0;i<N+1;i++) { a[0][i]=0; b[i]=0; } for(i=1;i<N+1;i++) { a[i][0]=i; for(j=1;j<N+1;j++) a[i][j]=j; } nminus(a,b,1,num); } 其中a[N+1][N+1]用来存储变化信息的数组,main()中,对其进行了赋初值,改函数用nminus()实现递归. 现在我遇到的问题是,该程序只能执行一次,不能回溯,停在nminus中的if(n==num)那一部分.我在nminus()中用for循环,以让它实现递归. 为什么? 热切期望大家赐教1 谢谢!