2017-10-27 13 views
-1

私は学校用のコードで問題に遭遇しています。私はそれを修正する方法を知らない。Pythonでの再帰を伴うニュートンのメソッド

ここに私のコードです。

""" 
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

PROBLEM

エラーがあなたのメインプログラムです。あなたは電話する

newton(x,estimate) 

しかし、estimateは未定義です。この関数は、呼び出すときに値を持つことを期待しています。メインプログラムは、それを割り当てる責任があります。これは、無限ループにあなたのプログラムをスロー

newton(x, x/2) 

次PROBLEM

:これを試してみてください。あなたが再発したときに正しく計算を行うために失敗しました:

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

新しい推定値は、古いものと商ではなく、それらの合計の平均ことになっています。合計を2で割る必要があります。返された結果を2つに分割しました。あなたは簡単な例を行うことができます今

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

:これを試してみてください。あなたのプログラムにはいくつか問題がありますが、私はそれらを学生のための練習として残します。楽しむ。

+0

私自身の答えは価値がありませんが、値のエラーで "float(" ")'にスキーマが失敗し、さらに 'if x ==" ":'行が返されることに気付きました機能していない。 – Aaron

+0

右...「練習として残して」。空の文字列を 'float'に変換することはできません。 – Prune

関連する問題