请问谁能告诉我这道题的思路c++

img

img
自然数拆分 - 题库 - 计蒜客 题号:T1248;知识点:深度优先搜索;难度:普及T2;对于任意大于 $1$ 的自然数 $n$,总是可以拆分成若干个小于 $n$ 的自然数之和。现请你编写程序求出 $n$ 的所有拆分。输入格式输入文件共一行,包含一个自然数,即要拆分的自然数 $n(1 \le n \le 20)$。输出格式输出文件 https://nanti.jisuanke.com/t/T1248


#include<bits/stdc++.h>
using namespace std;
int ans[21];      //用于存放答案
int n, total;    //总方案数
void pr(int d){   //按照要求打印答案
    total+=1;
    cout<<n<<"=";
    for(int i=1; i<=d-1; i++)cout<<ans[i]<<"+";
    cout<<ans[d]<<endl;
}
void dfs(int dep, int rest){
    if(rest==0){
        if(dep>2){   //避免单独值的出现
            pr(dep-1);
            return;
        }
    }
    for(int i=ans[dep-1]; i<=rest; i++){
        ans[dep]=i;
        dfs(dep+1, rest-i);
    }
}
int main()
{
    cin>>n;
    ans[0]=1;//初始化拆,18行循环语句的初始值
    dfs(1, n);
    //cout<<total;
    return 0;
}