题解 | #递归实现组合型枚举#
递归实现组合型枚举
https://ac.nowcoder.com/acm/problem/50918
2021.11.10
#include<cstring>
using namespace std;
typedef long long ll;
ll n,m;
ll a[30];
void recursion(ll i,ll j){
if(i == m){
a[i]=j;
for(int t =1;t <=m;t++){
cout << a[t] <<" ";
}
cout << endl;
return;
}
if(j == n) return;
a[i]=j;
for(int t = j+1;t<=n;t++)
recursion(i+1, t);
}
int main(){
cin >> n >>m;
recursion(0,0);
return 0;
}
本题的难点在于判断条件的情况,需要画出递归树,进行比较判断,我没有发现这个规律,在评论区中大佬的题解中,了解到了规律。 一开始我在主函数(第22行)里写
答案出错,在函数中(第18行)里的t写成了
recursion(i+1,j+1);
结果最后改写成了如上代码。 附上图片,画的递归树,