題目鏈接:點擊這裏
每次都是從上一個數字開始選取,直到加數sum的值等於n時才停止,或者當sum>n時停止。
#include<cstdio>
using namespace std;
int n;
int ans[50];
//sum記錄當前求和,cur爲當前序列元素個數
void dfs(int sum, int cur)
{
if(sum>n)
return;
if(sum==n) //若sum==n,輸出序列
{
printf("%d=",n);
for(int i=1;i<cur;i++)
printf("%d+",ans[i]);
printf("%d\n",ans[cur]);
return;
}
for(int i=ans[cur];i<n;i++)
{
ans[cur+1]=i; //這個值就是下一層遞歸時所用到的i的起始值,這裏old數組記錄下來
dfs(sum+i, cur+1); //進入到下一層遞歸
}
}
int main()
{
scanf("%d",&n);
ans[0] = 1;
dfs(0,0);
return 0;
}