# 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); } ```