Domaine : Récursivité 1 - Question n° 1

On considère la fonction ci-contre.

  1. Quel est le résultat renvoyé par mystere(5,3) ?
  2. mystere(5,3) renvoie : 5 + mystere(5,2) = 5 + 5 + mystere(5,1) = 5 + 5 + 5 + mystere(5,0) = 5 + 5 + 5 + 0 = 15.

  3. Décrire en français ce que fait cette fonction.

    Cette fonction renvoie le produit des entiers naturel n1 et n2.

  4. Ecrire le code d'une version itérative de cette fonction en utilisant une boucle.

    Ne pas oublier de commenter la fonction avec les docstring et de prévoir des tests avec doctest

  5. Quel est résultat renvoyé par mystere(2,-1) Expliquer.

    Cette fonction ne renvoie rien car les appels récursifs sont effectués sans arrêt car comme n2 est négatif, il prendra les valeurs successives -2, -3, -4 et aucune des conditions d'arrêt de la récursivité ne sera respectée. (n1 = 2 sera toujours différent de 0 et n2 sera toujours strictement négatif.)


     

Domaine : Récursivité 1 - Question n° 2

On considère la fonction ci-contre.

  1. Quel est le résultat renvoyé par mystere(2,3) ?

  2. mystere(2,3) renvoie mystere(2 - 1, 3 + 1) = mystere(1, 4) = mystere(1 - 1, 4 + 1) = mystere(0,5) = 5.

  3. Décrire en français ce que fait cette fonction.

    Cette fonction renvoie la somme des entiers naturels n1 et n2 (n1 et n2 étant passés en paramètres d'entrée la fonction).

  4. Quel est le résultat renvoyé par mystere(-2,1) ? Expliquer.

    Cette fonction ne renvoie rien car les appels récursifs sont effectués sans arrêt car comme n1 est négatif, il prendra les valeurs successives -2, -3, -4 et la condition d'arrêt de la récursivité ne sera respectée. (n1 sera toujours différent de 0.)

  5. Ecrire le code d'une version itérative de cette fonction en utilisant une boucle.


     

Ne pas oublier de commenter la fonction avec les docstring et de prévoir des tests avec doctest

Domaine : Récursivité 1 - Question n° 3

On considère la fonction ci-contre.

  1. Quel est le résultat renvoyé par mystere(2,5) ?

    mystere(2,5) renvoie 1 x 2 x 2 x 2 x 2 x 2 = 25 = 32.

  2. Décrire en français ce que fait cette fonction.

    Cette fonction renvoie le nombre xn (x puissance n).

  3. Ecrire le code d'une version itérative de cette fonction en utilisant une boucle.


     

Ne pas oublier de commenter la fonction avec les docstring et de prévoir des tests avec doctest.

Domaine : Récursivité 2 - Question n° 4

Ecrire en Python une fonction récursive pgcd(a,b) qui renvoie le plus grand diviseur commun de deux nombres a et b.

Pour cela, on utilisera le résultat mathématique suivant :

pgcd(a,b) = pgcd(b,r) avec a = bq + r

Domaine : Récursivité 2 - Question n° 5

Une association a remarqué que d'une année à l'autre :

  • elle gagne 4% de ses adhérents;
  • elle perd 50 adhérents

En admettant que le nombre d'adhérents de cette association était égal à 2000 le 1er janvier 2019, écrire en Python une fonction récursive nommée nombre(n) qui affiche le nombre théorique d'adhérents après n années avec $n \ge 1$.

Dans ce même programme, afficher le nombre théorique d'adhérents pour les 20 prochaines années.


     

Domaine : Récursivité 3 - Question n° 6

Pour la fonction récursive suivante : $ a(n) = \left\{ \begin{array}{ll} 1 \qquad \qquad \qquad \textbf{ si } n = 0 \\ 2 \times a(2n) \qquad \qquad \textbf{si } n \textbf{ est impair}\\ 1 + a(n - 1) \qquad \textbf{si } n \textbf{ est pair} \\ \end{array} \right. $

Déterminer un exemple d'appel qui ne se termine pas et justifier pourquoi éventuellement avec la liste des appels récursifs.

Pour n = 1, l'appel de la fonction ne se termine jamais.

En effet, $a(1) = 2 \times a(2) = 2(1 + a(1)) = 2(1 + 2 \times a(2)) = 2(1 + 2 (1 + a(1))) = ....$

La fonction a est appelée indéfiniment avec pour valeurs successives de n : 1,2,1,2,1,2, ....

Domaine : Récursivité 5 - Question n° 7

Voici écrit en pseudo-code la fonction qui permet de rendre la monnaie pour un distributeur de boissons.


         

On donne le code d'une version récursive de cette fonction nommée rendu_pieces_recursif()


         

Exemple d'utilisation :


         >>> rendu_pieces_recursif(2021,(500,100,50,10,5,2,1))
 	[500, 500, 500, 500, 10, 10, 1]
         

  1. Compléter le code d'une version récursive de cette fonction nommée rendu_pieces_recursif().
  2. Commenter cette fonction en utilisant les docstrings.
  3. Prévoir plusieurs jeux de tests en utilisant la bibliothèque doctest.

         

Domaine : Récursivité 6 - Question n° 8

Sur votre compte Replit traiter le projet nommé Sac à dos.