我的代码抛出递归错误。有人能解释一下我的递归基代码有什么问题吗?

2024-10-03 09:08:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在确定最低付款额,以确保12个月后债务全部清偿

未付的贷方余额每月按(a/12)%

我刚开始学习递归,不明白为什么我的递归基代码是错误的。控制台抛出递归错误。这是部分代码。你知道吗

#minPayment (3329,0.2)

def minPayment (cb, a):

'''
cb = initial credit balance
a = annual interest (in decimals)
'''

  x = 0
  unpaid = cb-x
  inc = (cb-x)*(a/12)

  def mintha (x):
     totalPay = unpaid + inc

     if (12*x - totalPay) >= 0:
         return x

     else:
         totalPay = unpaid + inc
         return mintha (x+10) 


 return mintha (x)

预期结果=310
实际结果=290


Tags: 代码returndef错误initialinccbbalance
2条回答

如果不知道所有变量都有什么值,就很难看到发生了什么,但我可以这么说:

  1. 看起来最底层的return mintha(x)永远不会到达,因为上面if/else中的每个子句都会返回一些内容。

  2. return totalPay and mintha (x+10)结尾的else子句的行为稍微不直观。正如@MichaelVeksler在上面指出的,如果totalPay为假(即0),则返回mintha(x+10),否则返回totalPay

因此,您编写的函数return if/else逻辑如下:

if (12*x - totalPay) >= 0:
    return x
else:
    if totalPay == 0:
        return totalPay
    else:
        return mintha (x+10) # recurse

我将仔细检查条件if (12*x - totalPay) >= 0:,并确保它最终将计算为true,因为这将使您脱离无限递归。(这似乎永远不会成为事实,因为totalPay增加了[也许?]每一个totalPay = unpaid + inc语句。)

另一种打破无限递归的方法是如果totalPay是0,但我不确定这是什么意思。你知道吗

Note: This answer does not speak to issues with the code producing a meaningful answer, it just tries to explain why infinite recursion is happening.

代码有几个问题:

  • 函数mintha在函数return mintha(x)的return语句中再次被调用,这可能会导致无休止的循环
  • else子句的return语句中:return totalPay and mintha (x+10)再次调用函数。如果达到最大深度,这可能会导致递归问题。你知道吗

因此,我们更正代码并为xcba分配一些假设值,并尝试一下。在返回值时,我们将它们四舍五入到最接近的整数。你知道吗

x = 0
cb = 25000
a = 50000
unpaid = cb-x   # unpaid balance
inc = unpaid*(a/12)  # increment 

def mintha (x):

    '''
    x is the minimum payable per month to pay off debt (round to tenth) 
    '''

    totalPay = unpaid + inc      # total credit balance, including the 
                                #    interests

    if (12*x - totalPay) >= 0:
        return round(x)

    else:
        totalPay = unpaid + inc
        return round(totalPay)

print(mintha(3000))
#Output:
104191667

旁白:我不太清楚这道题背后的数学原理。你知道吗

相关问题 更多 >