以(5,6)为例:
第一个place有5,4,3,2,1,五种情况;
i=5:执行(5,0,5)返回1;
i=4:执行(4,1,5)返回1;
i=3:执行(3,2,5)继续执行 i=2:(2,0,4)返回1;
i=1:(1,1,4)返回1;
返回2;
i=2:执行(2,3,5)继续执行 i=2:(2,1,4)返回1:
i=1:(1,2,4)执行i=1:(1,1,3)返回1: 返回2;
i=1;执行(1,4,5)继续执行i=1:(1,3,4)继续执行i=1:(1,2,3)继续i=1:(1,1,2)返回1; 返回7; 结束;

int recursion(int pro,int item, int place) {
    int sum = 0;
    if (item == 0)return 1;
    if (place == 0)return 0;
    if (item == 1)return 1;
    for (int i = min(pro,item); i >= 1; i--) {
        sum+=recursion(i,item - i, place - 1);
    }
    return sum;
}

alt