我有一个返回错误值的递归函数。为什么会这样,我将如何解决它?

时间:2017-10-26 20:14:00

标签: python recursion

我有这个功能

a = 2
b = 6
c = .4

def f(n):
    if n == 1:
        return a
    if n == 2:
        return b
    else:
        return c*f(n-1) + (1-c)*f(n-2)

它是一个简单的递归函数,有两个基本情况。 f(1)得到2,f(2)得到6,这是好的,但f(3)得到3.6000000000000005,当它应该只有3.6。我不明白这些额外数字的来源。可能导致这种情况的原因是什么?

2 个答案:

答案 0 :(得分:1)

欢迎来到浮点数学的魔力。你可以在这里找到一个很好的答案:Is floating point math broken? 剧透:不,只是很难。

答案 1 :(得分:0)

在计算机中使用floating point numbers使得必须对数字进行舍入,因为例如,在0.0和1.0之间存在无限实数。因此,计算机需要无限的记忆来代表它们。当然,它不会这样做,而是使用可以精确表示的离散数量的浮点数。如果计算结果不能用任何这些有限浮点数表示,则结果不准确。这就是你在这里发生的事情。