• Aucun résultat trouvé

I3a - TD1 Récursivité

N/A
N/A
Protected

Academic year: 2022

Partager "I3a - TD1 Récursivité"

Copied!
2
0
0

Texte intégral

(1)

I3a - TD1

Récursivité

1 Factorielle

On considère plusieurs variantes récursives de fonctions calculantn!.

fact1(n : entier)

si n<2 alors retourner 1 sinon retourner n*fact1(n-1) fact2(n : entier)

si n<2 alors retourner 1 sinon retourner fact2(n-1)*n fact3(n : entier)

si n<2 alors retourner 1

sinon si n<3 alors retourner 2 sinon retourner fact3(n-2)*(n-1)*n //utilisation : fact4(1,n)

fact4(acc : entier, n : entier) si n<2 retourner acc

sinon retourner fact4(acc*n, n-1)

Pour chacune de ces variantes, répondez aux questions suivantes : 1. S’agit il d’une récursivité terminale ?

2. Donnez par ordre chronologique les multiplications effectuées pour calculer 6!.

3. Combien d’appels à la fonction sont ils nécessaires pour calculer 10! ?

2 Fibonacci

On rappelle que la suite de Fibonacci est définie par :

F0 = 0 F1 = 1

Fn = Fn−1+Fn−2, n>1 On considère la fonction récursive suivante :

fibo(n)

si n<2 alors retourner n

sinon retourner fibo(n-1) + fibo(n)

1. Simulez l’exécution de fibo(5) en détaillant les appels récursifs, les valeurs des paramètres et les valeurs de retour de ces appels.

(2)

2. Exprimez, en fonction de n, le nombre d’appels à fibonécessaires pour calculer Fn.

3. Proposez une fonction récursive fibo1permettant de calculerFn en utilisant uni- quement la récursivité terminale. Cette procédure présente t-elle un intérêt par rap- port à une procédure itérative réalisant le même calcul ?

3 Dénombrement de combinaisons

La valeurCnp=n!/p!(n−p)! est le nombre de sous-ensembles possibles de p élé- ments dans un ensemble de néléments. On peut définir cette fonction par récurrence de plusieurs manières. Par exemple

Cn0 = 1, n≥0

Cnn = 1, n≥0

Cnp = Cn−1p +Cn−1p−1, n≥0,0<p<n Ou encore

Cnn = 1, n≥0 Cnp = n−npCn−1p , n≥0,0<p<n

1. Donnez une implentation en java de deux fonctions permettant de calculerCnp en utilisant respectivement les deux relations de récurences explicitée plus haut. Quelle est la précaution à prendre pour éviter des erreurs d’arrondi dans la deuxième fonc- tion ?

2. Pour chacune des deux implantations, exprimez en fonction de n et p le nombre d’appels de fonction nécéssaires pour calculerCnp.

3. En vous basant sur la première relation de récurrence donnée, implantez en java une fonction itérative calculant efficacementCnpen utilisant un tableau à une dimension.

4 Enumération de combinaisons

Pour tout ensemble finiE, on note (dans cet exercice)Cp(E)l’ensemble de toutes les parties deE de cardinal p.

1. En vous inspirant des relations de récurrences de l’exercice précédent, donnez une relation de récurrence permettant de spécifierCp(E)en fonction d’un élément quel- conquexdeE, deCp−1(E\ {x})et deCp(E\ {x}).

2. En vous basant sur cette récurrence, écrivez une méthode java affichant à l’écran toutes la parties de p éléments d’un ensemble E. Par commodité, la méthode à réaliser sera de la formestatic void generer(String E, String F, int p) et devra afficher toutes les chaînes comportant tous les caractères de F et p ca- ractères de E. Par exemple, generer ("abcd","",2) devra afficher les chaînes

"ab","ac","ad","bc","bd","cd".

Références

Documents relatifs

L'explication de ce temps très long pour la méthode récursive est la même que pour le calcul des termes de la suite de Fibonacci : des appels redondants qui ralentissent la

Donner sans justification les positions relatives des droites et plans suivants, on pr´ ecisera s’ils existent les intersections de ces objets :.. D´ eterminer l’ensemble de

Da ns cette partie, on eectue des tirages successifs avec remise et on s'arrête dès que l'on a obtenu au moins une boule blanche et une boule noire1. On note X la variable

Cette valeur correspond au nombre maximum d’élément pouvant être placé Cette valeur correspond au nombre maximum d’élément pouvant être placé dans le tableau, il est

[r]

La fonction d’Ackermann, fournit un exemple de fonction récursive mais non primitive récursive (notions totalement hors programme – pour simplifier, les fonctions

La différence visible entre la notion de fonction et celle de procédure réside dans le fait que dans l'en-tête de la seconde figure aussi la liste de ses paramètres avec leurs

Soit f une fonction définie sur un intervalle I.. Parmi les relations suivantes, indiquer celles qui représentent une fonction.. Déterminer l’ensemble de définition de