我正在用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的结果,但它只是说存在零除误差。
答案 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))
希望对您有帮助...