TD-3, récursivité
Vos programmes à déposer sous la forme Prenom.Nom par ftp sur poly en /users/profs/maranget/TD-3.
1 Une récursion simple
Écrire un programme qui lit un entier non-signé (type unsigned
int, format "%u"
) au clavier, puis l'affiche en base deux. Le
recours à la récursivité permet d'écrire une fonction d'affichage qui
reste simple. En effet, la solution non-récursive qui vient
immédiatement à l'esprit ne fait pas l'affaire, puisqu'elle imprime
les chiffres à l'envers.
void affiche(unsigned int n)
{
if (n == 0) {
printf("0");
}
while (n > 0) {
printf("%u",n % 2);
n = n / 2;
}
}
La solution récursive s'inspire de la remarque suivante :
le chiffre des unités de n, (n % 2
) doit être affiché après
tous les autres.
2 Un compte est bon simplifié
On simplifie le célèbre jeu, en se restreignant à la somme.
On commence par se donner un tirage de cinq
plaques :
#define NPLAQUES 5
int plaque[NPLAQUES] = {1,5,5,10,25};
Votre programme devra lire un entier n, puis écrire n comme une
somme de plaques lorsque c'est possible.
Par exemple :
Entrez n : 46
46 = 25+10+5+5+1
Entrez n : 30
30 = 25+5
Nous vous conseillons d'adopter la démarche suivante :
-
Commencez par écrire une fonction récursive qui renvoie vrai
lorsque n s'écrit comme une somme de plaques et faux dans le cas
contraire.
- Modifiez votre fonction pour qu'elle affiche les plaques utilisées.
3 Sous-ensembles
Écrire un programme qui lit un entier n au clavier puis affiche
tous les sous-ensembles de l'ensemble des entiers compris entre 1 et
n.
Voici quelques indications que vous pouvez utiliser ou pas.
Le coeur du programme est une fonction sous_aux dont voici le
prototype :
void sous_aux(int m,int i,int t[])
Le tableau t contient i éléments t0, t1, ...,
ti-1, tous compris entre m+1 et n.
La fonction sous_aux doit afficher tous les ensembles formés de la
réunion de t0, t1, ...,
ti-1 et d'un sous-ensemble des entiers compris entre 1 et m.
Donc, si m est nul, alors
sous_aux se contente d'afficher t.
Sinon, sous_aux doit se rappeler récursivement, pour afficher
d'une part, les sous-ensembles qui ne contiennent pas m et
d'autre part ceux qui contiennent m.
4 Il vous reste du temps !
On considère un échiquier de taille NMAX par NMAX.
Un cavalier part d'une case quelconque de l'échiquier. On demande de
trouver un parcours du cavalier qui passe une et une seule fois par
toutes les cases de l'échiquier.
Ce document a été traduit de LATEX par
HEVEA.