#include<stdio.h>
const int MAX=10; int g[MAX],N,M;
void dfs(int n,int m) { for(int i=n;i>=1;i--) { g[m]=i; if(m>1) dfs(i-1,m-1); else { for(int j=1;j<=M;j++) printf("%d ",g[j]); printf("\n"); } } }
int main() { N=5,M=3; dfs(N,M); return 0; }
|
备注:
有些问题涉及到排列,有些问题涉及到组合,不过从具体算法上来看,组合也就是规定了方向的排列,即调用递归函数时增加一个参数限制范围。
阅读(1853) | 评论(0) | 转发(0) |