思路:
递归实现:
交换元素->递归->交换元素。递归到数组末尾是打印所有元素,所以得记住数组头。
#include <stdio.h>
void printAll(int a[], int n);
void printInt(int a[], int n);
int *g;
int num;
int main(int argc, char *argv[])
{
int a[] = {1,2,3};
g = a;
num = sizeof(a)/sizeof(int);
printAll(a, num);
return 0;
}
void printAll(int a[], int n) {
if(a == NULL)
return;
if(n<0)
return;
if(n==0) {
printInt(g, num);
return;
}
int i;
for(i=0 ; i<n ; i++) {
int t = a[0];
a[0] = a[i];
a[i] = t;
printAll(a+1, n-1);
t = a[0];//!!必须要换回来
a[0] = a[i];
a[i] = t;
}
}
void printInt(int a[], int n) {
int i;
for(i=0; i<n ; i++) {
printf("%d\t",a[i]);
}
printf("\n");
}