TD de programmation fonctionnelle et logique TD 3 : r´ecursivit´e
Suite de Fibonacci
La suite de Fibonacci est d´efinie comme suit :
Fib(n) =
1sin= 0 1sin= 1
Fib(n−1) +Fib(n−2)sinon.
1. ´Ecrire une fonction r´ecursive qui calcule Fib(n).
2. ´Ecrire une fonction r´ecursive qui calcule, pourn >0,(Fib(n),Fib(n−1)). L’utiliser pour ´ecrire une fonction calculant Fib(n).
Calcul de (cos(nx), sin(nx))
Ecrire une fonction qui prend en entr´ee un entier´ net une paire de valeurs r´eelles qui sont en fait les valeurs du cosinus et du sinus d’un certain anglex, et qui renvoie la paire(cos(nx), sin(nx)). Autrement dit, le deuxi`eme argument de la fonction est une paire(a,b)telle quea = cos x etb = sin x . Le sch´ema de calcul doit bien
´evidemment ˆetre r´ecursif.
On pourra se servir des formules de trigonom´etrie suivantes :
cos(nx) = cos((n-1)x) cos(x) - sin((n-1)x) sin(x) sin(nx) = sin((n-1)x) cos(x) + cos((n-1)x) sin(x)
Tri par recherche du maximum
1. ´Ecrire une fonction qui retourne la valeur du maximum d’une liste.
2. ´Ecrire une fonction qui prend une liste en entr´ee et retourne la liste priv´ee de son ´el´ement maximal.
(a) ´Ecrire une version de cette fonction qui recherche d’abord l’´el´ement maximum, puis qui l’enl`eve de la liste.
(b) ´Ecrire une version de cette fonction qui calcule simultan´ement le maximum et la liste demand´ee.
3. Si les paires ont ´et´e vues en cours, ´ecrire une fonction qui prend en entr´ee une liste et renvoie une paire compos´ee de l’´el´ement maximum et de la liste des autres ´el´ements.
4. ´Ecrire une fonction de tri de liste par recherches successives de maximum (on utilisera bien ´evidemment cer- taines des fonctions pr´ec´edemment obtenues).
(a) ´Ecrire une fonction qui trie dans l’ordre d´ecroissant.
(b) ´Ecrire une fonction qui trie dans l’ordre croissant (sans utiliser de fonctions de concat´enations de listes).
1