这里先搞清楚递归的基本思想,递归函数的运行过程,暂且不考虑是否使用递归在效率方面的差异。
题目 1:
数的组合问题。从1,2,…,n中取出m个数,将所有组合按照字典顺序列出。如n=3,m=2时,输出:12 13 23
1 #include <stdio.h> 2 int Function(int n,int m,int a[],int depth,int output[],int size,int x) //n即指有n个数,m为从n个数中选取的个数,a[]为所选取的数组,depth递归进入深度,output答案,size为大小,x为当前扫描到的位置 3 { 4 if(m == 0) 5 { 6 int i; 7 for(i = 0;i < size;i++) 8 { 9 printf("%d ",output[i]); 10 } 11 printf("\n"); 12 return 1; 13 }else 14 { 15 int i; 16 for(i = x;i <= n - m;i++) 17 { 18 output[depth] = a[i]; 19 Function(n,m - 1,a,depth + 1,output,size,i + 1); 20 } 21 } 22 } 23 int main () 24 { 25 int output[2]; 26 int a[5] = {1,2,3,4,5}; 27 Function(5,2,a,0,output,2,0); 28 return 0; 29 }