我正在确定最低付款额,以确保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
如果不知道所有变量都有什么值,就很难看到发生了什么,但我可以这么说:
看起来最底层的
return mintha(x)
永远不会到达,因为上面if/else中的每个子句都会返回一些内容。以
return totalPay and mintha (x+10)
结尾的else子句的行为稍微不直观。正如@MichaelVeksler在上面指出的,如果totalPay
为假(即0),则返回mintha(x+10)
,否则返回totalPay
。因此,您编写的函数return if/else逻辑如下:
我将仔细检查条件
if (12*x - totalPay) >= 0:
,并确保它最终将计算为true,因为这将使您脱离无限递归。(这似乎永远不会成为事实,因为totalPay
增加了[也许?]每一个totalPay = unpaid + inc
语句。)另一种打破无限递归的方法是如果
totalPay
是0,但我不确定这是什么意思。你知道吗代码有几个问题:
mintha
在函数return mintha(x)
的return语句中再次被调用,这可能会导致无休止的循环else
子句的return
语句中:return totalPay and mintha (x+10)
再次调用函数。如果达到最大深度,这可能会导致递归问题。你知道吗因此,我们更正代码并为
x
、cb
和a
分配一些假设值,并尝试一下。在返回值时,我们将它们四舍五入到最接近的整数。你知道吗旁白:我不太清楚这道题背后的数学原理。你知道吗
相关问题 更多 >
编程相关推荐