    # -*- encoding:utf8 -*-

# Programme permettant de comparer le temps nécessaire au calcul d'un
# terme de la suite de Fibonacci par chacune des fonctions itératives
# et récursives

import time         # module permettant de manipuler des valeurs de temps

def Fib_Rec(n):
    """
    Fib_Rec(int n) --> int
    Retourne le n-ème terme de la suite de Fibonacci de manière récursive
    """
    if n == 1 or n == 2:
        return 1
    else:
        return Fib_Rec(n-2) + Fib_Rec(n-1)

def Fib_Iter(n):
    """
    Fib_Iter(int n) --> int
    Retourne le n-ème terme de la suite de Fibonacci de manière itérative.
    """
    if n == 1 or n == 2:
        return 1
    else:
        i = 2           # position du cadre scannant la suite
        a = 1           # valeur du premier terme présent dans le cadre
        b = 1           # valeur du deuxième terme présent dans le cadre
        while i < n:
            a, b = b, a+b
            i = i + 1
        return b

# Corps principal du programme:

n = int(input("Entrez l'indice du terme de la suite à calculer (-1 pour terminer): "))

while n >0:
    
    print("Lancement du calcul sur la version récursive...")
    a = time.time()        # Retourne la valeur du temps au début du processus
    Fib_Rec(n)
    b = time.time()        # Retourne la valeur du temps à la fin du processus
    print("Temps nécessaires:", b-a, "secondes d'exécution \n")

    print("Lancement du calcul sur la version itérative...")
    a = time.time()        # Retourne la valeur du temps au début du processus
    Fib_Iter(n)
    b = time.time()        # Retourne la valeur du temps à la fin du processus
    print("Temps nécessaires:", b-a, "secondes d'exécution \n")

    n = int(input("Entrez l'indice du terme de la suite à calculer (-1 pour terminer): "))
