递归计算迭代次数
Counting Iterations in recursion
我试图通过这个递归来跟踪迭代,但是 'iter' 总是 returns 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.'
我想这是因为我实际上必须 return iter += 1 但我不确定。 . .对不起,如果这是一个基本问题。谢谢!
您应该将 iter 传递给您正在递归调用的函数:
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.'
函数的第一行会在每次递归调用时将 iter 重置为 0。
您可以使用函数外部的变量来跟踪它或将 运行 总数作为参数传递。
我试图通过这个递归来跟踪迭代,但是 'iter' 总是 returns 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.'
我想这是因为我实际上必须 return iter += 1 但我不确定。 . .对不起,如果这是一个基本问题。谢谢!
您应该将 iter 传递给您正在递归调用的函数:
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.'
函数的第一行会在每次递归调用时将 iter 重置为 0。
您可以使用函数外部的变量来跟踪它或将 运行 总数作为参数传递。