Python中的二进制搜索,无限循环?

时间:2012-10-15 21:51:57

标签: python binary

我遇到一个在线课程(入门Python)的问题。从本质上讲,我们被告知使用二元搜索来找到每月最低的固定金额,以清除一年内的债务(四舍五入到最接近的0.01美元),给出余额和年利率。我的解决方案上传到他们的在线评分者时,只给出了这个错误:

“运行解决方案时出现问题。 我们无法运行您的解决方案。“

我可能处于无限循环中吗?如果是这样,我不太明白。原始代码发布在下面。谢谢大家花时间阅读本文!

MonthlyInterestRate = annualInterestRate/12
month = 1
LB = balance/12
UB = balance*(2.7/12)
check = balance
while abs(balance) > 10:
    payment = (LB + UB)/2
    while month <= 12:
        balance = (balance - payment)*(1 + MonthlyInterestRate)
        month = month + 1
    if balance > 10:
        LB = payment
        balance = check
    elif balance < -10:
        UB = payment
        balance = check
    else:
        print('Lowest Payment: ' + str(payment))
        break

1 个答案:

答案 0 :(得分:2)

似乎可能的罪魁祸首是你永远不会重置内部while循环之后的月份值。也就是说,一旦内部执行了一次,它将永远不再执行。这意味着平衡值不会改变,你将陷入无限循环。

由于您只使用月份来迭代一定次数,因此您应该将内部循环更改为

for m in range(month):
    balance = (balance - payment)*(1 + MonthlyInterestRate)

编辑:

如果起始余额大于13,那么只是玩你的功能似乎很快会收敛到一些。如果余额小于10,那么你的功能会降低平衡,所以它肯定不会终止。如果余额小于13,那么它似乎在1次迭代中终止。

我测试了不同年利率的功能,结果完全没有差别。收敛数似乎约为起始余额的90%。这是一个独立的功能。