So I have a recursive solution to the make change problem that works sometimes. It is:
def change(n, c):
   if (n == 0):
      return 1
   if (n < 0):
      return 0;
   if (c + 1 <= 0 and n >= 1):
      return 0
   return change(n, c - 1) + change(n - coins[c - 1], c);
where coins is my array of coins. For example [1,5,10,25]. n is the amount of coins, for example 1000, and c is the length of the coins array - 1. This solution works in some situations. But when I need it to run in under two seconds and I use:
coins: [1,5,10,25]
n: 1000
I get a:
RecursionError: maximum recursion depth exceeded in comparison
So my question is, what would be the best way to optimize this. Using some sort of flow control? I don't want to do something like.
# Set recursion limit
sys.setrecursionlimit(10000000000)   
UPDATE:
I now have something like
def coinss(n, c):
   if n == 0:
      return 1
   if n < 0:
      return 0
   nCombos = 0
   for c in range(c, -1, -1):
      nCombos += coinss(n - coins[c - 1], c)
   return nCombos
but it takes forever. it'd be ideal to have this run under a second.
 
     
     
    