Suites de Syracuse

Contexte

On appelle suite de Syracuse une suite d’entiers naturels définie de la manière suivante :

En répétant l’opération, on obtient une suite d’entiers strictement positifs dont chacun ne dépend que de son prédécesseur.

Pour une suite de Syracuse, on peut définir trois métriques :

Ces métriques sont illustrées par la figure ci dessous.

Suite de Syracuse pour n=15

Environnement de travail

Créer un fichier ex04-suites-syracuse.py.

Selon la convention de structuration des modules, ce fichier sera structuré en quatre parties :

  1. Imports et définition des variables globales est vide car on ne fait pas appel à des packages externes, ni à des variables globales ;
  2. Définition des fonctions secondaires ;
  3. Définition de la fonction principale contient l’appel aux fonctions secondaires ;
  4. Appel protégé de la fonction principale.

Objectifs

L’objectif est d’écrire une fonction syracuse() :

La structure est la suivante

def syracuse(n):

    pass

    # initialisation des variables

    # tant que la suite n'est pas terminée :
    #   - calcul du n suivant
    #   - mise à jour du temps de vol (tv)
    #   - mise à jour du temps de vol en altitude (tva) si nécessaire
    #   - mise à jour de l'altitude maximale (am)

    # retour de tv, tva, am


def main():
    # exemple d'exécution
    n = 15
    tv, tva, am = syracuse(n)
    print(n, tv, tva, am)

if __name__ == "__main__":
    main()

Utilisez la fonction syracuse() pour calculer les suites pour \(n = 15\) et \(n = 127\). Vérifier que les métriques obtenues sont conformes aux valeurs ci dessus.

Utilisez ensuite la fonction syracuse() pour calculer :

Informations complémentaires

Python permet de retourner plusieurs valeurs simultanément. L’explication détaillée sera abordée dans le chapitre Les tuples.

Par exemple, on peut définir une fonction qui retourne le carré et le cube d’un nombre entier :

        def square_and_cube(n):
                return n**2, n**3
        x, y = square_and_cube(3)