递归计算迭代次数

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。

您可以使用函数外部的变量来跟踪它或将 运行 总数作为参数传递。