

#--------------------------------topic: --------------------------------#




#################################Slide 2#######################################
success, current_gas = True, 0

for offset in range(0, n):
    current_gas = current_gas + gas[(start + offset) % n] 
                              - cost[(start + offset) % n]
    if current_gas < 0:
        success = False




#################################Slide 3#######################################
def find_valid_start(gas, cost):
    print("Gas: ", gas)
    print("Cost: ", cost)
    n = len(gas)

    for start in range(0, n):
        success, current_gas = True, 0
        for offset in range(0, n):
            current_gas = current_gas + gas[(start + offset) % n] 
                                      - cost[(start + offset) % n]
            if current_gas < 0:
                success = False
        if success == True:
            return start

    return -1



#--------------------------------topic: --------------------------------#




#################################Slide 4#######################################
def factorial(n):
    # Cas de base
    if n <= 1:
        return 1
    
    # Cas recursif
    return n * factorial(n-1)

print( factorial(4) )



#################################Slide 6#######################################
def fibonacci(n):
    # Cas de base
    if n <= 0:
        return 0
    if n == 1:
        return 1

    # Cas recursif
    return fibonacci(n-1) + fibonacci(n-2)

print( fibonacci(8) )



#################################Slide 8#######################################
def sum_list(lst):
    # Cas de base: liste vide
    if len(lst) == 0: 
        return 0
    
    # Cas recursif
    return lst[0] + sum_list(lst[1:])

print(sum_list([1, 2, 3, 4, 5]))  



#################################Slide 9#######################################
def is_palindrome(s):
    if len(s) <= 1:
        return True
    
    if s[0] != s[-1]:
        return False
    
    return is_palindrome(s[1:-1])

print(is_palindrome("radar"))     
print(is_palindrome("python"))    



#################################Slide 14#######################################
def bad_recursion(n):
    return n * bad_recursion(n-1)

def good_recursion(n):
    if n <= 1:  
        return 1
    return n * good_recursion(n-1)



#################################Slide 15#######################################
def count_digits(n):
    if abs(n) < 10:
        return 1
    
    return 1 + count_digits(n // 10)

print(f"12345 a {count_digits(12345)} chiffres")  
print(f"-987 a {count_digits(-987)} chiffres")    

