回溯算法 解决正整数求和问题 为什么陷入死循环

•问题描述
正整数n(n>0)可以写成若干个正整数之和的形式,比如4:
1+1+1+1 1+1+2 1+3 2+2 4
要求各个正整数按不减次序排列,共有多少种这样的求和式?
•输入格式
输入只有1个正整数,表示n。
•输出格式
按每行1个的方式输出所有求和式,然后以“Count=X”的形式输出统计信息,表示所有可能的求和式共有多少种。
(注:运行情况截屏只截最后8-10行输出即可)
•数据范围
1≤n≤100
•输入样例:
4
•输出样例:
1+1+1+1
1+1+2
1+3
2+2
4
Count=5

代码如下
#include
#include
using namespace std;
int n,k;
vector res;
int sum(){
int temp=0;
for(vector::iterator it=res.begin();it!=res.end();it++)
temp+=*it;
return temp;
}
void out(){
for(vector::iterator it=res.begin();it!=res.end();it++){
cout<<*it<<" ";
}
cout<<endl;

}
void backtrack(){
if(sum()==n)
{ out();
return;
}
if(sum()>n){
res.pop_back();
return;
}
for(int i=1;i<=n;i++){
res.push_back(i);
backtrack();
res.pop_back();
}
}
int main(){
cin>>n>>k;
backtrack();
}
按照样例输入 结果不断输出1 1 1 1 死循环
要求用回溯算法

我想要达到的结果

n最大可以取100, 递归的最大量级是n=14左右, 14!已经达到了10^10量级, 最好别用递归吧