2010-05-17 7 views
1

Ceci est le maximum diagramme de l'algorithme de recherche: alt text http://img-photo.apps.zing.vn/upload/original/2010/05/17/17/1274093752543903925_574_574.jpgdiagramme de l'algorithme

Alors, je me demande comment peut dessiner diagramme pour HaNoi programme Tour:

package tunl; 

public class TowersApp { 
    static int n = 3; 

    public static void main(String[] args) { 
     TowersApp.doTowers(3, 'A', 'B', 'C'); 
    } 

    public static void doTowers(int n, char from, char inter, char to) { 
     if (n == 1) { 
      System.out.println("disk 1 from "+ from + " to " + to); 
     } else { 
      doTowers(n-1, from, to, inter); 
      System.out.println("disk " + n + " from " + from + " to " + to); 
      doTowers(n-1, inter, from, to); 
     } 
    } 
} 

Je ne peux pas dessiner. Tout le monde peut m'aider !!!

+0

Maintenant, voici une bonne occasion pour l'un de ces dessins de cercle à main levée: D – luvieere

+0

Avez-vous un équivalent anglais de ce diagramme? –

+2

Wow, je n'avais aucune idée que quelqu'un utilisait encore les organigrammes pour la programmation! –

Répondre

1

Les implémentations récursives ne peuvent pas être modélisées directement par ce type de diagramme. 1) Une solution serait de réécrire l'algorithme pour être non-récursif, puis dessiner le diagramme. J'admets que ce n'est pas très satisfaisant.


1) Eh bien, techniquement, ils peuvent mais ils ne sont plus utiles, car ils ne représentent plus le flux de contrôle et pile de données sous-entendus par l'appel récursif.

2

Votre énigme est que l'algorithme est récursif. Une option consiste à le traduire en un algorithme itératif avec une pile explicite. Mais cela perd une partie de la structure de haut niveau de l'algorithme. Ce serait bien de montrer la structure récursive. Je ne suis pas au courant d'un idiome de diagramme de flux standard pour la récursivité, mais ce que je dessinerais est l'algorithme de base comme organigramme, et placez une boîte autour avec le même nom que celui utilisé dans les appels. Étant donné que les appels ont des paramètres légèrement différents de l'appel parent, vous pouvez les affecter à de nouvelles variables qui sont ensuite passées en paramètres. L'appel lui-même peut être étiqueté "CALL doTowers" ou similaire.