I am trying to find number of integer partitions of given n - number. If I have n == 4
, the answer should be 5 because:
4 = 1+1+1+1
4 = 2+1+1
4 = 3+1
4 = 2+2
4 = 4
My code works properly but the matter is that it counts big numbers for a very long time. I have no idea how to optimize my code. Maybe you can help me to make it faster?
def get_answer(n):
if n == 0:
yield []
return
for p in get_answer(n-1):
yield [1] + p
if p and (len(p) < 2 or p[1] > p[0]):
yield [p[0] + 1] + p[1:]
number_of_partitions=lambda n:sum(1 for _ in get_answer(n))