Menu


1NSI

Les exercices python à connaître

programme de première
E1:listes
E2:listes
E3:listes
E4:tri par insertion
E5:tri par séléction
E6:dictionnaires / string
E7:tuple
E8:boucle / booléen / liste
E9:string
E10:dictionnaire / fonctions
E11:booléens / listes
récursivité
E1:somme d'entiers
E2:chiffres romains
E3:factorielle
E4:rendu de monnaie
POO
E1:la classe Chien
E2:carrés semi-magiques
E3:filtre sur une pile
E4:durées en POO
Arbres
E1: Hauteur et taille d'un arbre
E2: parcours 1
E3: parcours 2
E4: Recherche dans un ABR
E5: Arbre binaire additif
E6: Arbre binaire de recherche
Diviser pour régner
E1:sommet d'un tableau
E2:Indice d'une panne
E3:calcul d'une puissance
Sécurisation des communications
E1:code César
E2:Vigenre
programmation dynamique
E1:Nombres de Delannoy
E2:Communication des acacias
E2:Mineur (le meilleur filon)

calcul d'une puissance

Il est possible de calculer la puissance \(x^n\) par récursivité en utilisant la définition : \[ x^n = \left\{ \begin{array}{2} 1 & \text{si} n=0, \\ x \times x^{n-1} &\text{sinon}.\\ \end{array} \right. \]


						def puissance_rec(x: float, n: int) -> float:
							if n == 0:
								return 1
							else:
								return x*puissance_rec(x, n-1)
					

Pour optimiser la vitesse de calcul, on remarque que : \[ x^n = \left\{ \begin{array}{2} 1 & \text{si} n=0, \\ (x \times x)^\frac{n}{2} &\text{si n est pair}.\\ x \times (x \times x)^\frac{n-1}{2} &\text{si n est impair}.\\ \end{array} \right. \] Cette définition permet de construire un algorithme de calcul en utilisant la méthode "diviser pour régner" :

  • Diviser : Diviser n
    • si n est pair et non nul on divise n par 2
    • si n est impair on divise n-1 par 2
  • Combiner :
    • si n est pair et non nul \( x^n = (x \times x)^\frac{n}{2} \)
    • si n est impair \(x^n = x \times (x \times x)^\frac{n-1}{2} \)
  • Régner : si n vaut 0, \( x^n = 1 \)

Écrire une fonction récursive puissance_rapide qui prend en paramètres deux entiers x et n, qui calcule \(x^n\) en utilisant cette méthode.