以(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;
}

京公网安备 11010502036488号