问题描述:
思路:
基本情况(Base case)
- 当n = 0时, 仅有 0 = 0一种划分,返回1
- 当n < 0时, 递归过界,返回0
- 当k = 0时, 无法划分,返回0
递推方法(Recursive calls)
- Q(n,m)=Q(n,m-1)+Q(n-m,m)
等式右边第一部分Q(n,m-1)表示被加数不包含m的分划的数目,第二部分表示被加数中包含(注意不是小于)m的分划的数目,因为如果确定了一个分划的被加数中包含m,则剩下的部分就是对n-m进行不超过m的划分。
代码如下:
1 | def count_partitions(n, k): |
测试:
1 | $ python3 -m doctest count_partiton.py -v |