Licence Informatique 1e année Algorithmique et Programmation 1

publicité
Licence Informatique 1e année
Algorithmique et Programmation
Travaux Dirigés -
1
Récursivité
Fonctions de Mac Carthy et d'Ackerman
fonction avec retour entier f91(entier n)
début
si (n > 100) alors
retourne n-10 ;
sinon
retourne f91(f91(n+11)) ;
finsi
fin
fonction avec retour entier ack(entier m, entier n)
début
si(m = 0) alors
retourne n+1;
sinon
si (n = 0) alors
retourne ack(m-1,1);
sinon
retourne ack(m-1, ack(m,n-1));
finsi
finsi
fin
a. Calculer la valeur de f91(91).
b. Calculer la valeur de ack(2,2).
Loi de Hofstadter : ça prend toujours plus de temps que prévu, même en tenant compte de la
Loi de Hofstadter.
2
Récursivité et mots
a. Écrire une fonction récursive qui prend en entrée un tableau de caractères
représentant un mot et renvoie vrai si ce mot est un palindrome et faux sinon
(un palindrome est un mot qui peut se lire de droite à gauche ou de gauche
à droite, comme Laval ou éluparcettecrapule).
b. Écrire une fonction récursive qui, à partir de deux tableaux de caractères,
renvoie vrai ou faux selon que le premier est ou non le "début" du deuxième,
c'est-à-dire si le contenu du deuxième est identique au contenu du premier,
1
mais avec des cases supplémentaires à la n. Par exemple, l'appel de la fonction sur les tableaux ['c','h','a','t'] et ['c','h','a', 't','o','n']
renvoie vrai, et son appel sur les tableaux ['c','h','a', 't'] et ['c','h',
'a','p','i','t','r','e'] renvoie faux.
3
Récursivité et calculs
a. Écrire une fonction récursive qui prend en entrée 2 entiers et renvoie le PGCD
des 2 entiers, calculé par la méthode d'Euclide 1 .
b. Écrire une fonction récursive qui prend en entrée 2 entiers a et b et renvoie
le résultat du calcul de ab .
4
Récursivité et tableaux
a. Écrire une fonction récursive qui permet de trouver l'indice d'un élément dans
un tableau d'entiers en eectuant une recherche séquentielle (cette fonction
renvoie -1 si l'élément n'est pas dans le tableau).
b. Écrire une fonction récursive qui permet de trouver l'indice d'un élément dans
un tableau d'entiers triés en eectuant une recherche dichotomique (cette
fonction renvoie -1 si l'élément n'est pas dans le tableau).
5
Suite de Syracuse
Une suite de Syracuse est dénie de la façon suivante : on part d'un entier
s1 ≥ 0 ; si sn est pair, sn+1 = sn /2 ; si sn est impair, sn+1 = 3sn +1. Si un terme
de la suite est égal à 1, les termes suivants se répètent selon un cycle de longueur
3 (1,4,2,1,4,2,...). La conjecture de Collatz (du nom du mathématicien qui a
créé cette suite), également appelée problème 3x+1, postule que les suites de
Syracuse de tous les nombres strictement positifs atteignent 1. C'est un problème
ouvert depuis plus de 80 ans...
a. Écrire une fonction récursive non terminale qui construit la suite de Syracuse
d'un nombre et renvoie l'indice du premier élément de la suite égal à 1 (s'il
existe!).
b. Écrire une fonction récursive terminale qui construit la suite de Syracuse
d'un nombre et renvoie l'indice du premier élément de la suite égal à 1 (s'il
existe!).
1. Le PGCD de a et b, avec a>b, est égal à b si le reste de a/b est nul et au PGCD de b
et de ce reste sinon
2
Téléchargement