Académique Documents
Professionnel Documents
Culture Documents
Fib(5) Fib(4)
Fib(1) Fib(0) 1 1 0 1 0 1 0
1 0
2. Programme :
Pseudo-code : Code en C :
#include <stdio.h>
écrire “ Le résultat de la suite de Fibonacci pour ” n printf("\nLe résultat de la suite de Fibonacci pour %d
“ est ” fibo. est %d.\n", n, fibo);
return 0;
Fin }
Exercice 2 :
Recherche à la main des premières valeurs :
somme(0) = 02 = 0 somme(1) = 02 + 12 = 1
somme(2) = 02 + 12 + 22 = 5
= somme(1) + 22
somme(3) = 02 + 12 + 22 + 32 = 14
= somme(2) + 32
somme(4) = 02 + 12 + 22 + 32 + 42 = 30
= somme(3) + 42
somme(n) = somme(n-1) + n2
Pseudo-code : Code en C :
#include <stdio.h>
écrire “ Le résultat de la somme des carrés de 0 à ” n printf("\nLe résultat de la somme des carrés pour %d
“ est ” somme. est %d.\n", n, somme);
Fin return 0;
}
Fonction sommeCarres (entier n)
Début int sommeCarres(int n) {
si n = 0 faire if (n == 0) {
retourner 0 ; return 0;
}
sinon faire else {
retourner sommeCarres(n-1) + n*n ; return sommeCarres(n-1) + n*n;
finsi }
Fin }
Exercice 3 – division :
Recherche de l’algorithme :
On veut diviser a = 43 par b = 10 : le quotient doit valoir 4 et le reste 3.
43 – 10 = 33 compteur = 0
→ 33 – 10 = 23 compteur = 1
→ 23 – 10 = 13 compteur = 2
→ 13 – 10 = 3 compteur = 3
Le reste est le résultat d’un certain nombre de soustraction de b à a.
Le quotient est le nombre de soustractions nécessaires pour obtenir le reste (compteur à incrémenter à chaque appel
de la fonction).
Ce raisonnement fonction si a est supérieur à b. Si on veut diviser a = 10 par b = 43, le quotient vaut 0 et le reste
vaut 10 (soit la valeur de a).
Pseudo-code : Code en C :
#include <stdio.h>
Fin return 0;
}
Fonction fonctionReste(entier a, entier b)
Début int resteDivisionEntiereRecursive(int a, int b) {
si a < b faire if (a < b) {
retourner a ; return a;
}
sinon faire else {
retourner fonctionReste(a-b, b) ; return resteDivisionEntiereRecursive(a - b, b);
finsi }
Fin }
Fonction fonctionQuotient(entier a, entier b)
Début int quotientDivisionEntiereRecursive(int a, int b) {
si a < b faire if (a < b) {
retourner 0 ; return 0;
}
sinon faire else {
retourner fonctionQuotient(a-b, b) + 1 ; return quotientDivisionEntiereRecursive(a - b, b) + 1;
finsi }
Fin }
Remarques :
• La fonction calculant le reste de la division entière est une récursivité terminale, puisque la dernière
opération de la fonction récursive est l’appel de cette même fonction.
• La fonction calculant le quotient de la division entière est une récursivité non terminale, puisqu’il y a
d’autres opérations après l’appel de la fonction récursive.
Exercice 3 – multiplication :
Recherche de l’algorithme :
On veut multiplier a = 3 par b = 4 :
somme = 0 compteur = 0
somme = somme + 3 compteur = 1
somme = somme + 3 compteur = 2
somme = somme + 3 compteur = 3
somme = somme + 3 compteur = 4
Pseudo-code : Code en C :
#include <stdio.h>
Fin return 0;
}
Fonction multiplication(entier a, entier b)
Début int multiplication(int a, int b) {
si a = 0 ou b = 0 faire if (a == 0 || b == 0) {
retourner 0 ; return 0;
}
sinon faire else {
retourner multiplication(a, b-1) + a ; return multiplication(a, b - 1) + a;
finsi }
Fin }