Comment faire de la n des boucles for imbriquées de manière récursive?
J'ai une méthode qui doit faire ce qui suit:
for (int a01 = 1; a01 <= 25; a01++) {
for (int a02 = a01 + 1; a02 <= 25; a02++) {
for (int a03 = a02 + 1; a03 <= 25; a03++) {
...
System.out.println(a01 + "," + a02 + "," + ... + "," + a015);
}
}
}
J'aimerais préciser le nombre de for imbriquées (dans le cas ci-dessus, je veux 15 imbriqués pour l').
Est-il un moyen de l'utilisation récursive de la programmation ici?
- S'il vous plaît, non. Ne pas le faire.
- Il suffit de créer une méthode et de le laisser appeler 15 fois. C'est une véritable méthode récursive.
- soin d'expliquer pourquoi? 😉
- Illisibles, incompréhensibles, laid, mauvais design, plein de bugs, rien de mal, vous pouvez penser à.
- En général, oui, vous pouvez le faire de manière récursive, et il peut être "robuste" et compréhensible. (Notez que les fonctions récursives sont souvent utilisés pour l'arbre de recherche, qui est effectivement imbriqués pour les déclarations.) Mais notez qu'il n'est géométrique de la croissance dans le nombre total d'itérations, et, imbriqués 15 de profondeur, la routine peut ne jamais se terminer. Allez-y! Même si vous ne vous apprendra quelque chose.
- Notez que la routine récursive doit simplement accepter l'index de début, la profondeur (décrémenté à chaque appel), et tout ce que vous avez besoin de l'adresse dans le code réel.
- Delimanolis: je suppose qu'il n'aime pas le code de cette façon. Il aime avoir un multi-dimensionnelle avec une dimension de 25 ans. Facile à nettoyer et à l'aide de programmation récursive - comme il l'a demandé.
Vous devez vous connecter pour publier un commentaire.
Oui. Ceci peut être effectué par programmation récursive.
Je suppose que vous n'aimez pas ÉCRIRE ces for imbriquées dans le code source - comme dans votre exemple, parce que c'est vraiment laid de programmation - comme les auteurs ont expliquer.
Suivantes (pseudo-Java-like) code de l'illustre. Je suppose une profondeur fixe pour la nidification. Alors vous aimez vraiment faire une boucle sur un nombre entier de vecteur de dimension de la profondeur.
Le tableau
counters
doit être initialisé à 0 (Arrays.fill(counters,0)
). Le tableaulength
doit être initialisé avec le nombre d'itérations pour la boucle for.Je suppose que vous souhaitez effectuer une certaine opération à l'intérieur de la boucle interne. Je vais appeler cette
performOperation(int[] counters);
- cela dépend de la multi-dimensionnelle compteur, c'est à dire les compteurs de l'extérieur pour l'.
Ensuite, vous pouvez exécuter les boucles for imbriquées en appelant
où
Dans votre cas votre Système.out.println() serait
length
.for(int i=0; i<13; i++) { for(int j=0; j<45; j++) { ... } }
puisdepth=2
etlength = { 13, 45 }
.J'ai créé ce programme pour afficher toutes les différentes combinaisons possibles de cartes (non répété). Il utilise récursive pour les boucles. Peut-être que cela peut vous aider.