Click here to Skip to main content
15,887,214 members
Please Sign up or sign in to vote.
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 6:39am
Comments
Richard MacCutchan 29-Jul-22 12:05pm    
Add some print statements to your code so you can actually see what is happening.

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.
 
Share this answer
 
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.
 
Share this answer
 

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



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