改进牛顿方法递归

时间:2011-11-15 08:15:46

标签: python

我已解决了之前的问题,现在我遇到了这个问题。 它要求改进我在下面发布的先前解决方案,但不能完全理解问题是什么。 (另外,无法弄清楚如何解决它。) 请帮忙 感谢。

问题: Elena抱怨项目2中的递归牛顿函数包括 估计的额外论据。该功能的用户不应该这样做 当他们调用这个函数时,提供这个值,它始终是相同的。 修改函数的定义,使其使用关键字参数 使用此参数的相应默认值,并调用该函数 没有第二个论证来证明它解决了这个问题。

这是我的代码:

def newtonSquare(x, estimate):
    if abs(x-estimate ** 2) <= 0.000001:
        return estimate
    else:
        return newtonSquare(x, (estimate + x / estimate) / 2)

def main():
    num = int(raw_input('Enter a positive number >> '))
    print newtonSquare(num, 1.0)

main()

2 个答案:

答案 0 :(得分:2)

问题是投诉,当有人打电话给newtonSquare时,他们总是这样做,初步估计为1.0。要将其设置为默认值,除非您明确提供它,否则只需将函数的定义修改为:

def newtonSquare(x, estimate = 1.0):

答案 1 :(得分:0)

Michael的默认值解决方案的替代方法是定义newtonSquare函数的局部递归函数:

def newtonSquare(x):

    def f(x, estimate):
        if abs(x-estimate ** 2) <= 0.000001:
            return estimate
        else:
            return f(x, (estimate + x / estimate) / 2)

    return f(x, 1.0)

def main():
    num = int(raw_input('Enter a positive number >> '))
    print newtonSquare(num)

main()

在这种情况下,默认值更好,更灵活,但这仍然是一个有用的模式。