排列组合中的组合问题
f()函数在到达叶子节点时要return
#include <bits/stdc++.h> using namespace std; const int maxn = 30; int n, r; int ans[maxn]; void f(int x, int start) // 已经选了x个数,现在位置是start { if (x > r) { // 抽了r个元素 for (int i = 1; i <= r; i++) { cout << setw(3) << ans[i] ; } cout << endl; return; // 必须加上 } for (int i = start; i <= n; i++) { // 不要重复枚举1 ans[x] = i; f(x + 1, i + 1); ans[x] = 0; } } int main() // 依次枚举每个数放哪个位置 { cin >> n >> r; f(1, 1); // 开始选第一个数字, 从第一个位置开始 return 0; }