Algorithme pour générer toutes les combinaisons d'une chaîne

J'ai trouvé un lien sur internet qui montre un algorithme permettant de générer toutes les combinaisons d'une chaîne: http://www.mytechinterviews.com/combinations-of-a-string

Algorithme est copié ci-dessous.

void combine(String instr, StringBuffer outstr, int index)
{
    for (int i = index; i < instr.length(); i++)
    {
        outstr.append(instr.charAt(i));
        System.out.println(outstr);
        combine(instr, outstr, i + 1);
        outstr.deleteCharAt(outstr.length() - 1);
    }
} 

combine("abc", new StringBuffer(), 0);

Ce que je ne comprends pas, c'est la ligne:

outstr.deleteCharAt(outstr.length() - 1);

Si je supprime cette ligne, le programme de toute évidence ne fonctionne plus, mais pourquoi est-ce nécessaire en premier lieu? Je comprends le récursive idée de l'endroit où nous faisons varier d'un caractère de début et de manière récursive sur les autres personnages, mais le deleteChar ligne ne semblent pas correspondre logiquement n'importe où. Quelle était la raison de l'ajout de la outstr.deleteCharAt ligne?

source d'informationauteur john | 2012-01-23