我试图通过这种递归来跟踪迭代,但是' iter'总是返回1.
def compute_root(poly, x_0, epsilon): ##Using Newton's method
iter = 0
try:
if abs(evalpoly(poly,x_0)) < epsilon:
return '%s is the root. Took %s iterations.'%(x_0,iter)
else:
iter += 1
x_1 = x_0 - (evalpoly(poly,x_0)/evalderiv(poly,x_0))
return compute_root(poly, x_1, epsilon)
except ZeroDivisionError:
print 'No root.'
我在想它,因为我必须实际返回它+ = 1但我不确定。 。 。对不起,如果这是一个基本问题。谢谢!
答案 0 :(得分:2)
你应该将它传递给你递归调用的函数:
def compute_root(poly, x_0, epsilon, iter=None): ##Using Newton's method
if iter is None:
iter = 0
try:
if abs(evalpoly(poly,x_0)) < epsilon:
return '%s is the root. Took %s iterations.'%(x_0,iter)
else:
iter += 1
x_1 = x_0 - (evalpoly(poly,x_0)/evalderiv(poly,x_0))
return compute_root(poly, x_1, epsilon, iter=iter)
except ZeroDivisionError:
print 'No root.'
答案 1 :(得分:2)
函数的第一行会在每次递归调用时将iter重置为0.
您可以使用函数外部的变量来跟踪此变量,或将运行总计作为参数传递。