对于一个整数 n,想要将其划分为正整数若干之和。设这些正整数为 $ {m_i}
$,显然 0 < m i ≤ n 0
对于一个划分,若 m a x ( m i ) ≤ m max(m_i) \leq m max(mi)≤m,则我们称这种划分为 n n n的 m m m划分,将其记为 N ( n , m ) N(n,m) N(n,m)
那么,针对 m m m的不同取值,可以将问题不断退化。
最后,按照上面思路实现代码即可。
def splitNum(n, m):
if n == 1 or m == 1:
return 1
elif n > m:
return splitNum(n-m, m) + splitNum(n, m-1)
elif n < m:
return splitNum(n, n)
elif n == m:
return 1 + splitNum(n, n-1)
else:
return NotImplementedError
print(splitNum(6, 6))