计算递归中的迭代次数

时间:2015-03-16 02:51:03

标签: python function recursion iteration

我试图通过这种递归来跟踪迭代,但是' 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但我不确定。 。 。对不起,如果这是一个基本问题。谢谢!

2 个答案:

答案 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.

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