Maison >tutoriels informatiques >connaissances en informatique >Pas familier avec le code de méthode récursive Java
C'est aussi une méthode en boucle. Elle peut être difficile à comprendre pour les débutants... Laissez-moi vous expliquer
Par exemple, le paramètre dans la méthode fun() est 100. Permettez-moi de le changer en 2
Le but de cette méthode récursive est d'accumuler. Le résultat est le même que l'accumulation de boucle, mais la méthode d'exécution est différente.
Le processus d'exécution du programme est le suivant :
Lorsque vous passez 2, le programme exécutera le contenu dans else
C'est-à-dire return temp+fun(temp-1);
Le retour réel est : 2+fun(2-1);
C'est-à-dire : 2+fun(1) change le paramètre d'origine 3 en 2 ;
Permettez-moi de commencer. Il s'agit d'un programme d'accumulation, alors retirez-en 3 et attribuez-le à la somme définie précédemment, donc la somme actuelle = 2 ;
Comme il s'agit d'une méthode récursive, la méthode fun(int temp) doit être exécutée à plusieurs reprises ;
C'est juste que le paramètre devient désormais 1
La prochaine procédure se déroulera donc comme suit :
Parce que le paramètre est 1, il entrera dans le if
Il renverra donc 1 ;
Donc la somme actuelle devrait être la somme précédente plus le 1 renvoyé par le fun actuel(1)
donc.....maintenant la somme devrait être : 2+1=3 ;
Je viens de donner un exemple du cycle entre deux nombres. Le cycle entre les 98 autres nombres est également comme ça
.En bref, la récursivité signifie continuer à s'appeler jusqu'à ce que les conditions ne puissent plus être remplies, alors il ne s'appellera plus
Jetez un œil, c'est peut-être un peu trop. Je veux l'expliquer plus clairement. Je l'ai déjà rencontré, mais je n'ai demandé à personne d'autre. Si vous ne comprenez pas, demandez-moi à nouveau. ...
Le travail est très beau. Si vous pouvez réaliser une interface de ce niveau, ce petit problème ne devrait pas être difficile pour vous.
La question ici est :
1. Pour concevoir la structure de ce graphique, le moyen le plus simple est d'utiliser un tableau.
2. Comment énumérer les nœuds connectés. En termes simples, il s’agit de juger le coin supérieur gauche, le coin supérieur droit, la gauche, la droite, le coin inférieur gauche et le coin inférieur droit.
3. Comment déterminer la même couleur en séquence ? L'algorithme le plus simple est la méthode d'inondation. Commencez simplement à regarder dans les 6 directions ci-dessus. Après avoir trouvé le point suivant, commencez à regarder dans les 6 directions. . .
Le code approximatif est le suivant :
classe Lapin
{
final int D_UP_LEFT = 1;
final int D_UP_RIGHT = 2;
final int D_LEFT = 3;
final int D_RIGHT = 4;
final int D_DOWN_LEFT = 5;
final int D_DOWN_RIGHT = 6;
getColor () ;
getCloseRibbit (direction intérieure)
{
... // Voici la fonction pour amener les lapins adjacents dans la direction spécifiée
// Sinon, renvoie null .
}
int getColor () {}
Liste checkColor ()
{
Liste ArrayList = new ArrayList () ;
doCheckColor (liste, ceci) ;
liste de retour ;
}
void doCheckColor (Liste liste, Rabbit r)
{
if (r.getColor () != this.getColor () || list.contains (r))
retour ;
list.add (this) ;
pour (int i = D_UP_LEFT ; i
{
Lapin suivant = r.getCloseRibbit (i) ;
if (suivant != nul)
next.doCheckColor (liste, r) ;
}
}
}
La liste résultante contient les lapins de la même couleur que vous souhaitez.
Récursion utilisant des tableaux :
cours public Test12 {
int statique M = 4;
int statique N = 3;
static int[] a= new int[]{1,2,3,4};
static int[] b = new int[N];
public static void main(String[] args){
C(M,N);
}
vide statique C(int m,int n){
int i,j;
pour(i=n;i
b[n-1] = i-1;
si(n>1)
C(i-1,n-1);
autre {
pour(j=0;j
System.out.print(a[b[j]] + " ");
System.out.println();
}
}
}
}
Sortie :
1 2 3
1 2 4
1 3 4
2 3 4
java implémente l'opération récursive n ! , saisissez n, si ce n'est pas un nombre entier, vous serez invité à saisir à nouveau...
porter java.util.Scanner ;
importer java.util.regex.Matcher;
importer java.util.regex.Pattern;
Test en classe publique {
public int jiecheng(int num) {// factorielle récursive
si (num > 1)
retour num * jiecheng(num - 1);
sinon si (num == 1)
retour 1;
autre
retour 0;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); // Obtenir la saisie du clavier
Num de chaîne = "";
Pattern p = Pattern.compile("\d+"); // Expression régulière, correspondant à des entiers (1 à N chiffres)
Matcher m = nul;
int k = 0;
pendant (vrai) {
System.out.print ("Veuillez entrer un entier : "
);num = sc.nextLine(); // Récupère une ligne d'entrée
m = p.matcher(num);
if (m.matches()) {
k = Integer.valueOf(num); // Convertir une chaîne en entier
pause;
}autre
System.out.println ("Pas un entier, veuillez ressaisir!"
);System.out.println();
}
System.out.println(new Test().jiecheng(k)); //Appelle la méthode factorielle
}
}
Puissiez-vous vivre dans une terre précieuse et prospérer pendant mille ans, que tout soit prospère pour votre famille et puissiez-vous accueillir la nouvelle année
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!