Files
cours/recursivite/exercice_MJoannic/sqrt/main.py
2025-04-01 14:28:43 +02:00

76 lines
2.1 KiB
Python

### D'après WIKIPEDIA
def racine_raphson(number: float, precision: float) -> float:
assert number > 0, "La racine du nombre n'est pas réelle."
y = (number / 3) + 1
diff = precision + 1
while diff > precision:
y_next = (y + number / y) / 2.0
diff = abs(y_next - y)
y = y_next
return y
if __name__ == "__main__":
print(racine_raphson(36, 0.000000000000001) ** 2 == 36)
def dichotomie(
liste: list[any],
element: any,
start: int = 0,
end: int = None,
bypass_sorting: bool = False,
) -> int:
"""Recherche la partie entière de la racine carrée d'un nombre en utilisant une recherche dichotomique.
Args:
liste (list[any]): Liste de nombres simulée pour la recherche.
element (any): Le nombre dont on cherche la racine carrée entière.
start (int, optional): Index de départ. Defaults to 0.
end (int, optional): Index de fin. Defaults to None.
bypass_sorting (bool, optional): Ignoré dans cette version.
Returns:
int: La partie entière de la racine carrée.
"""
if end is None:
end = len(liste) - 1
if start > end:
return end # Retourne la partie entière trouvée.
middle = (start + end) // 2
squared = middle * middle
if squared == element:
return middle
elif squared < element:
return dichotomie(liste, element, middle + 1, end, bypass_sorting=True)
else:
return dichotomie(liste, element, start, middle - 1, bypass_sorting=True)
def racine_dich(number: int) -> int:
"""
Calcul de la partie entière de la racine carrée d'un nombre entier.
Args:
number (int): Nombre dont on cherche la racine carrée.
Returns:
int: La partie entière de la racine carrée.
"""
assert number >= 0, "Le nombre doit être positif ou nul."
liste = [i for i in range(number // 2 + 2)] # Simule une "liste" pour la dichotomie
return dichotomie(liste, number)
if __name__ == "__main__":
print(racine_dich(36)) # Retourne 6
print(racine_dich(20)) # Retourne 4
print(racine_dich(0)) # Retourne 0
print(racine_dich(1)) # Retourne 1