On souhaite écrire un méthode calculant la division par 2 d'un entier, mais sans utiliser l'opérateur / de Java, seulement les opérateurs + et -.
Pour cela on remarque la propriété suivante :
Ajouter dans la classe Recursivite une méthode récursive public static int division2Rec(int m) qui retourne la division par 2 de l'entier m.
On souhaite écrire un méthode calculant le produit de deux entiers, mais sans utiliser l'opérateur * de Java, seulement les opérateurs + et -.
Pour cela on remarque la propriété suivante :
Ajouter dans la classe Recursivite une méthode récursive public static int multiplicationRec(int m, int n) qui retourne le produit des entiers m et n.
Une définition récursive de Cnp est donnée par :
La recherche dichotomique est un moyen de trouver rapidement une valeur dans un tableau trié. Elle repose sur le principe du « diviser pour régner ».
L'idée est simple et consiste à choisir un indice particulier kcorrespondant à la moitié du tableau trié t. Trois cas se présentent :
Ecrire alors dans la classe Recursivite une méthode récursive public static int rechercheDicho(Tableau t, int g, int d, int e) qui prend en argument :
À chaque appel récursif, la méthode vérifie si les indices g et dsont corrects, calcule l'indice médian entre i et j et effectue à partir de cet indice médian k le traitement décrit précédemment.
Le but de cet exercice est de résoudre le problème des tours de Hanoï en utilisant un algorithme récursif. Rappelons d'abord le principe de ce jeu.
N disques de diamètres deux à deux différents sont initialement enfilés sur une « tige de gauche ». Ils sont disposés de telle sorte que leurs diamètres décroissent de la base de la tige vers le sommet de la tige (voir figure 1). Le but du jeu est de déplacer ces N disques vers une « tige de droite » en se servant d'une « tige du milieu », et en respectant les règles suivantes :
La solution de ce problème peut s'écrire très simplement sous forme récursive. En effet, on peut en proposer la solution suivante :
Avant de programmer cet algorithme, testez son fonctionnement sur papier en faisant son arbre d'appel pour N = 3.
Ajouter alors dans la classe Recursivite une méthode déplacerTour, qui prend en argument un entier N représentant le nombre disques à déplacer, et trois arguments de type caractère (char), src, inter et dest. Cette méthode résout le problème des tours de Hanoï pour le nombre N de disques spécifié et affiche l'action effectuée lors de chaque déplacement.
Par exemple, le résultat de déplacerTour(2, 'A', 'B', 'C') sera l'affichage de :
Disque 1 de A vers B Disque 2 de A vers C Disque 1 de B vers C
|