49 votes

Inverser une chaîne avec récursivité en Java

Voici du code Java pour inverser une chaîne de manière récursive.

Quelqu'un pourrait-il fournir une explication de la façon dont cela fonctionne?

 public static String reverse(String str) {
    if ((null == str) || (str.length() <= 1)) {
        return str;
    }
    return reverse(str.substring(1)) + str.charAt(0);
}

Je ne comprends pas comment cela peut fonctionner.

4voto

Dave Points 2870

Exécutez-le via un débogueur. Tout deviendra clair.

2voto

assylias Points 102015

Exécutez le code ci-dessous - il s'imprime :

Étape 0 : ello / H Étape 1 : llo / e Étape 2 : lo/l Étape 3 : o/l L'étape 3 renvoie : ol Retours de l'étape 2 : ol L'étape 1 revient : olle L'étape 0 renvoie : olleH

Code:

 public class Test {

    private static int i = 0;

    public static void main(String args[]) {
        reverse("Hello");
    }

    public static String reverse(String str) {
        int localI = i++;
        if ((null == str) || (str.length()  <= 1)) {
            return str;
        }
        System.out.println("Step " + localI + ": " + str.substring(1) + " / " + str.charAt(0));
        String reversed = reverse(str.substring(1)) + str.charAt(0);

        System.out.println("Step " + localI + " returns: " + reversed);
        return reversed;
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X