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);

结果最后改写成了如上代码。 附上图片,画的递归树, alt