NUMERIQUE ET SCIENCES INFORMATIQUES

Niveau : Terminale générale, enseignement de spécialité NSI

Première Accueil

D
É
C
O
N
N
E
C
T
É

Chapitre 4 : Récursivité

1 - Introduction

Dans un programme, une fonction récursive est une fonction qui s’appelle elle-même

Droste Cacao                    Image dans image

Visionnez la 1ère partie de la vidéo jusqu'à 11min35. Lien si indisponible

2 - Exemple :

 

Résumez vos constatations ci-dessous :

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 fonction 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 fonction. 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

3 - Hello world de la récursivité

Définition : 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!.

Une boucle for permet de résoudre le problème, mais nous allons résoudre le problème de manière récursive

Exemple : 5! = 5*4*3*2*1

Avant de programmer on commence par identifier le cas de fin ici : si n=1 alors on renvoie 1

Algorithme :

Fonction factorielle
paramètres :
n : un entier strictement positif et supérieur à 1
retourne :
le résultat du calcul

début
si n≤1 alors retourner 1
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

Traduire en langage python l'algorithme et testez la fonction

 

Exercice 1 ★

Réaliser à l’aide d’une fonction récursive le dessin suivant :

un colimaçon 
colimaçon

Cahier des charges

Principales fonctions du module turtle

• goto(x,y) Aller à l'endroit de coordonnées x et y
• forward(distance) Avancer d'une distance donnée
• backward(distance)Reculer
• up()Relever le crayon (pour pouvoir avancer sans dessiner)
• down() Abaisser le crayon (pour pouvoir recommencer à dessiner)
• color(couleur) Couleur peut être une chaîne prédéfinie ('red', 'blue', 'green', etc.)
• left(angle)Tourner à gauche d'un angle donné (exprimé en degré)
• right(angle)Tourner à droite
• width(épaisseur)Choisir l'épaisseur du tracé
• write(texte)texte doit être une chaîne de caractères délimitée avec des " ou des '
• speed(vitesse)Définit la vitesse de traçage (vitesse est un entier compris entre 0 à 9)

Résultat


Exercice 2 : ★★

l'arbre binaire
arbre

Cahier des charges

Pour résoudre le problème, on commence par dessiner uniquement 2 branches à partir du tronc :

arbre1

Lorsqu'on atteint les extrémités des branches (en vert) on appelle récursivement la fonction avec L/2

arbre2

Résultat


Exercice 3 : ★★

Le flocon de Koch
arbre

Ordre 0Ordre 1ordre 2
koch0koch1koch2

Cahier des charges

Généralisation

A partir de l'ordre 1, l'ordre n est composé du motif de l'ordre n-1 de longueur L/3

Programmer le motif de l'ordre 0 lorsque n=0 sinon le motif d'ordre 1 appelant le motif d'ordre n-1 avec une longueur L/3

Résultat


Exercice 4 : ★★

Le triangle de Sierpinzki
arbre

Ordre 0Ordre 1ordre 2
Sierp0Sierp1Sierp2

Généralisation

A partir de l'ordre 1, l'ordre n est composé du motif de l'ordre n-1 de longueur L/2

Programmer le triangle d'ordre 0 de longueur L, puis les 3 triangles d'ordre 1, en appelant l'ordre n-1.

Le dessin des triangles commence en bas à gauche. Vous pouvez vous aider d'un crayon et d'une feuille de papier pour dessiner l'ordre 1

Résultat
Fond : Texte : Tables :