我真的需要这个python代码解释

我真的需要这个python代码解释,python,recursion,Python,Recursion,我有一个python代码,它使用amount和coins change数组作为参数,并基于可能的硬币组合数量,用于提供完全深入的货币或金额。但这里的问题是,我似乎不知道这种递归是如何工作的 我已经找到了工作代码,但我需要一些关于thos工作原理的解释,因为我用名为countChange(4[1,2])的代码得到了它。 这里的问题是它是如何工作的,因为我注意到下面的代码, 数量开始减少,数组中的值为零 def countChange(amount, coins): if (amount =

我有一个python代码,它使用amount和coins change数组作为参数,并基于可能的硬币组合数量,用于提供完全深入的货币或金额。但这里的问题是,我似乎不知道这种递归是如何工作的

我已经找到了工作代码,但我需要一些关于thos工作原理的解释,因为我用名为
countChange(4[1,2])
的代码得到了它。 这里的问题是它是如何工作的,因为我注意到下面的代码, 数量开始减少,数组中的值为零

def countChange(amount, coins):
    if (amount == 0):
        print("amount is 0", amount, coins)
        return 1
    elif (amount < 0 or coins == []):

        print("amount is less than 0 or empty coins array", amount, coins)
        return 0
    else:
        countChange(amount, coins[:-1])
        print("first called")
        countChange(amount - coins[-1], coins)
        print("second called")

countChange(4, [1,2])
当它第一次来回移动时

countChange(4, [1,2])
金额不是零,并且coins数组不是空的,否则语句将工作。在else语句中,有一个递归调用

countChange(4, [1])-------->opened
然后再次进入else语句,再次调用递归

countChange(4, [])----->opened
现在转到elif语句,打印字符串并返回调用的零。因此,递归的最后一次调用将结束

countChange(4, [])------>ended..
在else块上我们还有三条语句

print("first called")
countChange(amount - coins[-1], coins)
print("second called")
根据这一点,“first called”字符串被打印出来。我们再次进行递归调用,现在我们用计数[-1]减去金额值,因此金额=4-1=3

countChange(3, [1])----->opened
与此类似,else语句被激活,并再次进行递归调用

countChange(3, [])----->opened
这样,如果跟踪递归,就可以清除。,
希望这对您有所帮助:)

理解这一点的唯一方法是假装您是Python解释器,一步一步地浏览代码。在进行递归调用时,请注意:每次调用都以新的变量副本和新值开始。享受是的,先生,但是我发现变量传递了。我先得到4,然后是一个空数组,然后4开始减少1,硬币数组设置为零,我知道递归是有步骤的,第一个被调用的是先调用的,直到它满足某个条件,然后它继续到下一个,但我似乎不明白为什么它向前,然后返回到第一个,然后是第二个,然后返回到第一个,然后为什么第一个从4开始,空数组,然后4不断减少。即使是作为一个intepreter,我仍然是这个想法的人,我建议使用Visual Studio代码进行调试。在那里调试是相当容易的。将代码复制/粘贴到脚本文件中,在代码的开头添加断点,转到调试部分并逐行开始调试。如果你想的话,挑一张纸和一支铅笔。这比有人向你解释要容易得多。我一直在这样做,这就是为什么我要求我需要一位专家来解释发生了什么,因为我需要理解,以便知道如何在其他类似问题上更有效地使用此代码。请任何人帮我解释一下,此代码是正确的,但我不理解它是如何工作的。至少给我一个提示,为什么它在第一个调用的递归函数中显示4和epty数组,然后我将尝试从中继续
countChange(3, [])----->opened