牛顿在python中递归的方法

时间:2017-10-27 16:29:36

标签: python python-3.x recursion newtons-method

所以我遇到了我的学校代码问题。我不知道如何解决它。

这是我的代码。

"""
Convert Newton’s method for approximating square roots in Project 1 to
a recursive function
named newton. (Hint: The estimate of the square
root should be passed as a second
argument to the function.)"""


import math
def newton(x, estimate):
    if abs (x-estimate ** 2) <= 0.000001:
            return estimate
    else:
        estimate = newton(x, (estimate + x/estimate)) /2
    return estimate                      
def main():
    while True:
        x = float(input('Enter a positive number or enter/return key to quit: '))
        if x == "":    
                break
        print("Newtons estimate of the sqaure root of ", x, "is: ", newton(x,estimate))
        print("The True value of the square root is: ", math.sqrt(x))
main()

1 个答案:

答案 0 :(得分:1)

<强>问题

错误在您的主程序中。你打电话

newton(x,estimate)

estimate未定义。该函数在调用它时期望它有一个值:主程序负责分配一个值。试试这个:

newton(x, x/2)

下一个问题

这会将程序抛入无限循环。当你再次出现时,你没能正确地做数学运算:

estimate = newton(x, (estimate + x/estimate)) /2

您的新估算应该是旧估算的平均和商,而不是它们的总和。你必须将总和除以2。您将返回的结果除以2。试试这个:

estimate = newton(x, (estimate + x/estimate)/2)

现在你可以做一个简单的例子。你的程序还有其他几个问题,但我会将这些问题作为练习留给学生。玩得开心。