蓝桥杯-数的划分(递归法详解)

一、题目回顾

将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序)。
例如:n=7,k=3,下⾯三种分法被认为是相同的:
1,1,5;

1,5,1;

5,1,1;
问有多少种不同的分法。
输⼊格式
n,k
输出格式
⼀个整数,即不同的分法
样例输⼊
7 3
样例输出

二、分析

使用递归来计算将整数 n 分成 k 份的方式。
我们首先找到规律,当 n 和 k 都给定时,我们可以考虑第一份的大小,它可以从 1 到 n/k 中选择,
第2份、第3份...都不能小于第一份的大小。
例如n=7,k=3,则n/k=2
则情况为:
            1 1 5
            1 2 4
            1 3 3
            2 2 3
若第一份在继续下去,则会出现重复。

一旦我们确定了第一份的大小,剩余的部分是将剩余的数字 (n - 第一份的大小) 分成 (k - 1) 份。
我们继续递归地对这些剩余的部分进行相同的过程,找结束条件:
若k=1,且n>0,那么这时只有1种情况;
若k=1,且n=0,则有0种情况(不

你可能感兴趣的:(蓝桥杯,算法,动态规划)