15,790,917 members
1.00/5 (1 vote)
See more:
for this coin change problem, the following code works smoothly without any problem:
```def coinChange(coins, amount):
dicts={}
def func(amount):
if amount in dicts:
return dicts[amount]
if amount==0:
return 0
mini=float("inf")
for i in coins:
if amount-i>=0:
mini=min(mini,1+func(amount-i))

dicts[amount]=mini
return mini
mini=func(amount)
if mini>amount:
return -1
return mini```

What I have tried:

but if i change mini=amount+10 instead of float('inf'), then for the input: coins=[281,20,251,251] , amount=7323, i get 39 instead of 66. Why?

i mean since in every recursion depth, lets say the amount remaining is 7, the maximum coins you will ever need is also 7 (all '1' coins) so it wont get greater than that. but why does it gives wrong answer for (mini=amount+10) but gives correct if its set to infinity?
Posted
Updated 29-Jul-22 7:39am
Richard MacCutchan 29-Jul-22 12:05pm
Add some print statements to your code so you can actually see what is happening.

## Solution 1

`float(inf)` is used for setting a variable with an infinitely large value.
As a result, when you compare `mini` with any value that `func` can return it will always initially return the other value as it has to be finite and thus less than an infinitely large value!

Use the debugger to look at exactly what your code is doing and you will see what I mean.

## Solution 2

Quote:
but if i change mini=amount+10 instead of float('inf'), then for the input: coins=[281,20,251,251] , amount=7323, i get 39 instead of 66. Why?

Your code do not behave the way you expect, or you don't understand why !

There is an almost universal solution: Run your code on debugger step by step, inspect variables.
The debugger is here to show you what your code is doing and your task is to compare with what it should do.
There is no magic in the debugger, it don't know what your code is supposed to do, it don't find bugs, it just help you to by showing you what is going on. When the code don't do what is expected, you are close to a bug.
To see what your code is doing: Just set a breakpoint and see your code performing, the debugger allow you to execute lines 1 by 1 and to inspect variables as it execute.

Debugger - Wikipedia, the free encyclopedia[^]

Mastering Debugging in Visual Studio 2010 - A Beginner's Guide[^]
Basic Debugging with Visual Studio 2010 - YouTube[^]

27.3. pdb — The Python Debugger — Python 3.6.1 documentation[^]
Debugging in Python | Python Conquers The Universe[^]
pdb – Interactive Debugger - Python Module of the Week[^]

The debugger is here to only show you what your code is doing and your task is to compare with what it should do.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Top Experts
Last 24hrsThis month
 CPallini 110 Rick York 40 Richard MacCutchan 30 merano99 30 Andre Oosthuizen 20
 Richard MacCutchan 1,520 Dave Kreskowiak 1,400 Maciej Los 840 CPallini 830 Richard Deeming 773

CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900