2011-04-23 2 views
0

Possible en double:
Write a recursive function that reverses the inputBesoin d'aide avec mon programme récursif qui inverse l'entrée

Récemment, j'ai lu le livre C++ pour tout le monde et j'ai eu du mal mettre en place une fonction récursive (Confusion de penser à ...)

La question était: Ecrire une fonction récursive string reverse(string str) qui retourne l'inverse de str

C'est ce que j'ai jusqu'à présent:

string reverse(string str) 
{ 
    string word = ""; 

    if (str.length() <= 1) 
    { 
     return str; 
    } 
    else 
    { 
     string str_copy = str; 
     int n = str_copy.length() - 1; 
     string last_letter = str_copy.substr(n, 1); 

     str_copy = str_copy.substr(0, n); 
     word += reverse(str_copy); 
     return last_letter; 
    } 
    return word; 
} 

Mes problèmes est maintenant:

Si j'entre wolf, il retourne f

Si je change return last_letter-return word, je reçois w

Si je change à return str_copy, Je reçois wol

+1

Cette question est différente de http://stackoverflow.com/questions/5760774/write-a-recursive-function-that-reverses-the-input? Ça a l'air assez similaire. –

+0

Eh bien, les gens arrêtent de répondre après environ 45 minutes – Alex

+0

C'est une mauvaise perception. Si vous n'êtes pas satisfait du type de réponses données, attendez au moins une demi-journée. Ensuite, vous pouvez commencer la prime pour la même question au lieu de la poster à nouveau. – Mahesh

Répondre

1

Cela ferait le travail:

last_letter Supprimer de retour;

`changement

word += reverse(str_copy); 

à

word = last_letter+reverse(str_copy); 

Je vais laisser la pensée à vous!

Meilleur.

+0

OUI. ÇA MARCHE!!!!!! J'ai commencé hier et je n'arrive pas à comprendre. Merci – Alex

3

Vous devez retourner la combinaison du dernier caractère (last_letter) et l'inversion du reste de la chaîne, mais vous ne le faites pas dans aucune de vos tentatives. Vous ne retournez jamais qu'une partie ou l'autre.

string reverse(string str) 
{ 
    int len = str.length(); 
    if (len <= 1) 
    { 
     return str; 
    } 
    else 
    { 
     return str.substr(len-1, 1) + reverse(str.substr(0, len-1)); 
    } 
} 
+0

Off d'une erreur - devrait être 'reverse (str.substr (0, len-1));' sinon, le 'reverse 'interne a le même' str' que le 'reverse' externe. – user470379

+0

@ user470379, merci, corrigé. – ikegami

Questions connexes