2017-10-27 11 views
-1

그래서 학교용 코드 문제가 있습니다. 나는 그것을 고치는 법을 모른다.파이썬에서 재귀를 사용하는 Newton의 메서드

여기 내 코드입니다.

""" 
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() 
+4

코드를 강조 표시하고 Ctrl + K를 눌러 코드를 포맷하십시오. 또한 구체적으로 도움이 필요한 것은 무엇입니까? 여기에 질문이 없습니다. – Carcigenicate

+1

이 형식을 올바르게 지정하십시오. 읽기가 어렵습니다. – acushner

+0

"문제가 발생했습니다"라는 말은 기꺼이 알려주는 것이 전부입니까? 문제를 비밀로한다면 어떻게 도와야합니까? –

답변

1

문제

오류는 메인 프로그램입니다. 전화 할 때

newton(x,estimate) 

그러나 estimate은 정의되지 않았습니다. 이 함수는 호출 할 때 값을 가질 것으로 기대합니다. 주 프로그램이 값을 할당해야합니다. 이 시도 :

newton(x, x/2) 

다음 문제

이 무한 루프에 프로그램을 던졌습니다.

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

새 추정치가 이전과 지수의 평균이 아니라 그 합 있어야하는데 : 당신이 재발 할 때 제대로 수학을하지 못했습니다. 합계를 2로 나누어야합니다. 반환 된 결과를 두 개로 나누었습니다. 이 시도 :

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

지금 당신이 간단한 예제를 할 수 있습니다. 프로그램에는 몇 가지 다른 문제가 있지만 학생을위한 운동으로 남겨 두겠습니다. 재미있게 보내십시오.

+0

내 대답은 가치가 없지만, "hit to return"스키마는 값 오류로'float ("")'에서 실패하고'if x == "": "행을 만든다는 것을 알았습니다 비 기능적. – Aaron

+0

오른쪽 ... "운동으로 남았습니다." 빈 문자열을'float'로 변환 할 수 없습니다. – Prune