// 從剩余的nM個籃子裏空出nX = m*n - x;個球
int GetBall(int nX, int nM, int n) {
int nA; int nS = 0;/* 如果這次情況裏確定從壹個籃子裏空出球 */
// 如果nM等於1 返回 1; if (nX <= n) {/* 最少從壹個籃子裏拿走,最多必須從 nM 與 n 中 較少個數的籃子裏拿走 */
// 當nA從 1 增加到 nX,循環執行下行語句
nS += GetBall(nA,1,n) + GetBall(nX-nA,nM-1,n);// 返回 nS;
} else if (nX > n) {/* 1. 知道剩下的籃子數目nM,2. 可以保證nX-nA <= nM*n */
// 當nA從 n 減少到 nX-n*nM,循環執行下行語句
nS += GetBall(nA,1,n) + GetBall(nX-nA,nM-1,n);// 返回 nS;
}}
int main() {
int m,n,x; m = 5; n = 6; x = 22; printf("%d\n",GetBall(m*n-x, m, n)); return 0;}