To może być trochę za późno na odpowiedź, ale najprostszym i dokładnym sposobem obliczenia pierwiastka kwadratowego jest metoda Newtona.
Masz liczbę, dla której chcesz obliczyć jej pierwiastek kwadratowy, (num)i masz przypuszczenie, jaki jest jej pierwiastek kwadratowy (estimate). Oszacowanie może być dowolną liczbą większą niż 0, ale liczba, która ma sens, znacznie skraca głębokość rekurencyjnego połączenia.
new_estimate = (estimate + num / estimate) / 2
Ta linia oblicza dokładniejsze oszacowanie na podstawie tych 2 parametrów. Możesz przekazać wartość new_estimate do funkcji i obliczyć inny new_estimate, który jest dokładniejszy niż poprzedni, lub możesz utworzyć rekurencyjną definicję funkcji, taką jak ta.
def newtons_method(num, estimate):
# Computing a new_estimate
new_estimate = (estimate + num / estimate) / 2
print(new_estimate)
# Base Case: Comparing our estimate with built-in functions value
if new_estimate == math.sqrt(num):
return True
else:
return newtons_method(num, new_estimate)
Na przykład musimy znaleźć pierwiastek kwadratowy 30. Wiemy, że wynik wynosi od 5 do 6.
newtons_method(30,5)
liczba to 30, a szacunek to 5. Wynik każdego wywołania rekurencyjnego to:
5.5
5.477272727272727
5.4772255752546215
5.477225575051661
Ostatnim wynikiem jest najdokładniejsze obliczenie pierwiastka kwadratowego z liczby. Jest to ta sama wartość, co wbudowana funkcja math.sqrt ().