# Lời giải bài IPARA
> Tác giả `Lam`
## Đề
Cho số nguyên dương $n$, mỗi dãy số nguyên dương không giảm có tổng bằng $n$ được gọi là một cách phân tích số $n$.
**Yêu cầu:** Hãy liệt kê các cách phân tích số $n$ theo thứ tự từ điển $( n <= 50 )$
## Lời giải
Dựng hàm đệ quy để đi qua mọi cách phân tích số $n$
Hàm `dequy(int pos, int sum, int last) ` duyệt qua cách phân tích có `pos` phần tử mà tạo ra tổng `sum` và có phần tử cuối có giả trị là `last`
## Code
```cpp
int a[110];
int n;
void dequy(int pos, int sum, int last)
{
if (sum > n) return; /** nếu tổng các phần tử > n thì không hợp lệ**/
if (sum == n) /** in ra cách phân tích hiện tại **/
{
for (int i = 1; i <= pos; i++)
cout << a[i] << ' ';
cout << '\n';
hoanvi++;
return;
}
/** vì một cách phân tích là một dãy không giảm nên
ta có điều kiện next>=last **/
for (int next = last; next <= n; next++)
dequy(pos+1,sum+next,next);
}
```