Adloun

Python (école d'ingénieur) · Chapitre 2 · Exercice

Suite de Syracuse (Conjecture de Collatz)

Structures de contrôle : conditions et boucles

Énoncé

La suite de Syracuse est définie par : La conjecture affirme que pour tout , la suite atteint 1. Écrire une fonction temps_de_vol(n) qui renvoie le nombre d'étapes pour atteindre 1.

Corrigé

def temps_de_vol(n):
    """
    Retourne le temps de vol de n (nombre d'étapes jusqu'à 1)
    Précondition : n >= 1
    """
    if n <= 0:
        raise ValueError("L'entrée doit être positive")
    
    etapes = 0
    while n != 1:
        if n % 2 == 0:
            n //= 2
        else:
            n = 3 * n + 1
        etapes += 1
    return etapes

Exemples :

SuiteTemps de vol
110
21
37
68

Remarque algorithmique : On peut utiliser la mémoïsation avec functools.lru_cache pour optimiser :

from functools import lru_cache

@lru_cache(maxsize=None)
def temps_de_vol_memo(n):
    if n == 1:
        return 0
    if n % 2 == 0:
        return 1 + temps_de_vol_memo(n // 2)
    else:
        return 1 + temps_de_vol_memo(3 * n + 1)

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →