Ein neues Schuljahr, eine alte babylonische Methode.
Also, ich werde das nicht für Sie lösen, aber ich kann Sie beginnen.
Wir können eine kleine Funktion schreiben, die jede x_{k+1}
berechnet:
def sqrt_step(n, xk):
return 1/2.0 * (xk + float(n)/xk)
Lasst uns n = 100
gesetzt.
sqrt_step(100, 1) # returns 50.5
Nun wollen wir diese Zahl in die Funktion noch ein paar Mal füttern:
sqrt_step(100, 50.5) # 26.2
sqrt_step(100, 26.2) # 15.0
sqrt_step(100, 15.0) # 10.8
... konvergiert dies bis 10 als k
bis ins Unendliche geht.
Nun, wenn nur eine Art und Weise war eine Operation immer und immer wieder k
mal auszuführen ... Ich bin von einem Drei-Buchstaben-Wort zu denken, die mit ‚f‘ beginnt und Reime mit ‚Erz‘ ...
EDIT
Sie eine ehrliche Mühe gemacht haben, das Problem zu lösen - was ich zu gehe nehmen eine Praxis Übung Hausaufgaben ist und nicht eine Zuordnung.
Sie können dies einfach lösen, indem Sie die Funktion sqrt_step
in einer neuen Funktion verwenden.
def square_root(n, k):
xk = 1
for i in range(k):
xk = sqrt_step(n, xk) # or just: xk = 1/2.0 * (xk + float(n)/xk)
return xk
Tests:
square_root(64, 100) # 8.0
square_root(144, 100) # 12.0
Wie Sie weiter fortgeschritten sind, werden Sie über funktionale Programmiertechniken erlernen, die es Ihnen ermöglichen, zu vermeiden, Variablen zu überschreiben und for
Schleifen ausdrücklich schriftlich Dies kann wie folgt durchgeführt werden. Für jetzt jedoch ist dies der einfachste Ansatz.
Pro [SO allgemeine Richtlinien für Hausaufgabenhilfe] (http://meta.stackexchange.com/a/10812) wird vorgeschlagen, dass Sie einen guten Glauben versuchen, das Problem selbst zuerst zu lösen **, und posten Sie das in deiner Frage. – ahoffner