#######################################################################################################
####################TP-TD 12: variables locals/globals-Fonctions récursives############################
#######################################################################################################
'''
Exercice 1
Soit U la suite récurrente suivante:
U(1)=10 et U(n)=3U(n-1)+2 si n>1

Ecrire une fonction de paramètre n qui retour le n eme terme de U.
'''
# -----Méthode irérative (utilisant des boucles)------
def suite(n):
    u=10
    for i in range(1,n):
        u=3*u+2
    x=10
    y='bjr'
    z=10+x
    print('locals=',locals())
    return u

# -----Méthode récursive (qui appelle à elle même avec un autre paramètre)------
def suite_recur(n):
    if n==1:return 10
    return (3*suite_recur(n-1)+2)

'''
Exercice 2
Ecrire une fonction récursive puiss_recur qu accepte x et n (x supposé un réel et n est u_n entier) et retourne x**n.
'''
def puiss_recur(x,n):
    if n==1:return x
    return  x*puiss_recur(x,n-1)
'''
Exercice 3
Ecrire une fonction récursive multi_recur qu accepte x et n (x supposé un réel et n est u_n entier) et retourne nx.
'''
def multi_recur(x,n):
    if n==0: return 0
    # if n==1: return x
    # if n==2: return 2*x
    return x+multi_recur(x,n-1)
'''
Exercice 4
Ecrire une fonction récursive multi_recur qu accepte x et n (x supposé un réel et n est u_n entier) et retourne nx.
'''
def fact(n):
    if n==1: return 1
    return n*fact(n-1)
'''
Exercice 5
Ecrire une fonction without_car qu accepte une chaine s et  un caractere c et retourn une version de s sans c. (par plusieur méthodes)
'''
# 1ere méthode
def without_car1(s='',car=''):
  new_s=''
  for c in s:
    #if c==car:continue
    if c!=car: 
      new_s+=c
    #else:s+=car
  return new_s

# 2eme méthode
def without_car2(s='',car=''):
  return s.replace(car,'')

# 3eme méthode
def without_car3(s='',car=''):
  return ''.join(s.split(car))

# 4eme méthode
def without_car4(s='',car=''):
  s0=s
  while True:
    i=s0.find(car)
    if i==-1:break
    s0=s0[:i]+s0[i+1:]
  return s0
      
    
##  i=s0.find(car)
##  while i!=-1:
##    s0=s[:i]+s[i+1:]
##    i=s0.find(car)
##    
##  else:
##    return s

#5eme méthode
def without_car5(s='',car=''):
  
  i=s.find(car)
  if i==-1: return s
  else:
    return without_car5(s[:i]+s[i+1:],car)



