代码之家  ›  专栏  ›  技术社区  ›  beginnerboy

递归给出了错误的答案,没有错误,但我不知道是什么错了

  •  0
  • beginnerboy  · 技术社区  · 2 年前

    我正在试图解决一个问题,关于计算你需要多少付款在一年内清除信用余额。 年利息是0.2,月余额的公式是:(余额-月付款)+(0.2/12)*(余额-月付款),如果我重复这个计算12次,我可以在年底得到余额。 困难的部分是计算我们需要在一年内结清余额的金额。这是我的代码,它正在运行,但我不明白为什么它给出了错误的答案。

    def clear(b,m,x):
        while m !=0:
            b=(b-x)+(0.2/12)*(b-x)
            x=x        
            m-=1
        if m == 0 and b<= 0:
            return x
        else:
            return clear(b,m+12,x+20)
        
    
    
    
    
    m=12
    b=3329
    x=20
    print(clear(b, m, x))
    

    测试值3329应该返回310,但我的代码返回160。。。 谢谢!

    0 回复  |  直到 2 年前
        1
  •  0
  •   beginnerboy    2 年前

    谢谢大家的帮助,我知道为什么。。。 对于可能看到这个问题的人,请记住递归将值从公式范围返回到全局范围。。。 在我的代码中,它最后返回b,b的值随范围而变化。。。在我的例子中,从x=20到大约60,平衡在增加,但在100之后,它每次都减少,而b从公式范围返回到全局范围。 例如,当x=60时,b的值增加到约6000,但当它为100或120时,它会减少到约2000-3000,然后在x=160时,b的值小于0,我的代码将其作为结果。。。 这是正确的代码!在我修正了递归中b的值之后,它工作正常!

    def clear(b,m,x):
        b=4773
        while m !=0:
            b=(b-x)*(0.2/12+1)
            m-=1
        if m == 0 and b<= 0:
            return x
        else:
            return clear(b,m+12,x+10)
        
    
    
    
    
    m=12
    b=3329
    x=20
    print(clear(b, m, x))