我在通过平方参数除法时遇到ZeroDivisionError

时间:2019-02-16 23:51:11

标签: python-3.x

我正在用python编写一个递归函数,该函数一直给我除以零错误,为什么我得到这个?

我已经尝试了几种if语句重排,以消除n == 0时的所有操作,但是仍然会以某种方式发生。我在其他部分添加了一个print(n),以查看何时发生错误,并且可以一直正常打印到n = 2,但是当n = 1时,我似乎得到了错误。这很奇怪,因为当我执行kleinfeldt(1)时,效果很好...

def kleinfeldt(n):
    if n == 1:
        return 1
    else:
        return ((1/(n^2)) + kleinfeldt(n-1))

例如,如果我输入kleinfeldt(3),我应该得到1 + 1/4 + 1/9的结果,但它只是说存在零除误差。

2 个答案:

答案 0 :(得分:1)

似乎您将XOR运算符(^)与幂运算符(**)混淆了。如果更改它,代码可以正常工作:

def kleinfeldt(n):
    if n == 1:
        return 1
    else:
        return ((1/(n**2)) + kleinfeldt(n-1))

如果您关心精确的结果,则可能需要阅读有关fractions module的信息。

答案 1 :(得分:1)

是的,确实会出现ZeroDivisionError: integer division or modulo by zero错误,因为您在else条件的下一行使用xor({^)运算符:

return ((1/(n^2)) + kleinfeldt(n-1))

当涉及到输入3时,2^2将为您提供0的输出,因此,如果将1/(2^2)除以除,则会出现错误。

为避免这种情况,您可以使用**作为幂函数,也可以执行以下操作:

import math
int(math.pow(2, 2))

尝试以下修改后的代码:

def kleinfeldt(n):
    if n == 1:
        return 1
    else:
        return ((1/(n**2)) + kleinfeldt(n-1))

import math
def kleinfeldt(n):
if n == 1:
    return 1
else:
    return ((1/(int(math.pow(n, 2)))) + kleinfeldt(n-1))

希望对您有帮助...