Niveau : Terminale générale, enseignement de spécialité NSI
Dans un programme, une fonction récursive est une fonction qui s’appelle elle-même
Si une fonction récursive fait appel à elle-même systématiquement pour n'importe quelle valeur du paramètre, le nombre d'appels successifs d'une fonction récursive sera infini. C'est pourquoi, pour certaines valeurs du paramètre, une fonction récursive ne fait pas appel à elle-même.
La définition d'une fonction récursive est donc constituée :
Le programme ci-dessous est une procédure récursive (cette fonction ne renvoie rien).
proc_recursive(1)
Réponses :
La récursivité est gourmande en mémoire car on doit empiler toutes les données (variables, adresses de retour, ...) avant l'appel de la procédure récursive. On parle d'une pile d'exécution. Ces valeurs seront dépilées lors du retour. Notez que la variable i est une variable locale de chaque procédure. La taille de la pile est limitée par l'espace mémoire alloué ici par le navigateur Internet qui est de l'ordre de 5000. Cette taille peut être augmentée avec l'instruction suivante :
import sys sys.setrecursionlimit('Taille')
Non reconnue sur ce site
La Fonction récursive suivante permet, de calculer la factorielle d'un nombre entier
Rappel : la factorielle d'un entier naturel n est le produit des nombres entiers strictement positifs inférieurs ou égaux à n. Cette opération est notée avec un point d'exclamation, n!.
Exemple : 5! = 5*4*3*2*1
Une boucle for
permet de résoudre le problème, mais nous allons résoudre le problème de manière récursive
Avant de programmer on commence par identifier le cas de base ici : si n=1 alors on renvoie 1
Algorithme :
Fonction factorielle
paramètres :
n : un entier strictement positif et supérieur à 1
retourne un entier :
le résultat du calcul
début
# Cas de base :
si n≤1 alors
retourner 1
# Appel récursif :
sinon
retourner n*factorielle(n-1)
fin
Simulation pour n=3
factorielle (3)
retourne 3 * factorielle (3-1)
retourne 2 * factorielle (2-1)
retourne 1 (n==1 condition de fin)
2 * 1
3 * 2 * 1
retourne (6)
Principe de fonctionnement de la pile |
---|
Ecrire la fonction récursive factorielle en langage python et testez la fonction avec différentes valeurs de n
Écrire une procédure récursive compte qui :
Écrire une procédure récursive décompte qui :
Ce programme ne diffère que très peu par rapport à l'exercice 1
Écrire une fonction récursive somme_entiers qui :
Vérifiez que la somme des n premiers entiers est bien égal à
Écrire une fonction récursive nombre_de_chiffre qui :
Écrire une fonction récursive renverse qui :
Par exemple renverse("ados") devra retourner "soda". Vous pouvez esssayer d'autres mots anacycliques : bons, super, saper, retartiner, trop ...
Rappel sur la manipulation des chaines de caractères:
>>>chaine ="soda" >>>print(chaine[1:]) oda
La suite de Fibonacci est la suite dont les premiers termes valent : 0, 1, 1, 2, 3, 5, 8, 13, . . .
Dans cette suite, chaque terme est la somme des deux précédents.
Écrire une fonction récursive fibo qui :
Par exemple :
fibo(0) devra retourner 0,
fibo(1) devra retourner 1,
fibo(6) devra retourner 8.
Ecrire une fonction récursive min_rec
qui prend en paramètre un tableau d'entiers tab
, un indice de liste indice
et indice_min
en entier qui représente l'indice du minimum.
La fonction min_rec
doit retourner un uplet contenant le plus petit élément de la liste tab
et son indice.
Compléter la fonction recursive rendu_monnaie
qui prend en paramètre un entier : une somme à rendre a_rendre
et une liste d'entiers de billets et de pièces bp=[100, 50, 20, 10, 5, 2, 1]
et qui retourne une liste contenant les billets et pièces à rendre.
Compléter le code Python ci-dessous de la fonction rendu_monnaie
.
a) Ecrire une fonction recursive recherche_occurrence
qui prend en paramètre une liste d'entiers tab
et un entier val
.
La fonction retourne un entier qui compte le nombre de fois que val
se trouve dans tab
.
b) Ecrire une variante de la fonction récursive précédente que vous nommerez recherche_occurrence2
qui n'utilise plus la variable n
Compléter la fonction recursive est_trie
qui prend en paramètre une liste d'entiers tab
.
La fonction retourne True
si le tableau est trié par ordre croissant sinon False
.
Fond : Texte : Tables : Thème du langage:
Contenu
sous licence CC BY-NC-SA 3.0
Auteurs : Amandine Schreck et Pascal Hassenforder 06/10/2022
Mise à jour du 10/10/2023