[c++] invertire una stringa con funzione ricorsiva

InCuBuS_89
ciao a tutti...devo scrivere un programma che data una stringa mi restituisce la stessa ma invertita; esempio ''Hello'' -> ''olleH'' utilizzando una funzione ricorsiva...ho scritto questo codice ma il programma non gira...sapreste dirmi dov'è che sbaglio?? grazie...



#include
#include

using namespace std;

string reverse(string frase){

string primo=frase.substr(0,1);
string resto=frase.substr(1, frase.length()-1);

frase=reverse(resto)+primo;
return frase;
}

int main()
{ string phrase;

cout << "Inserire frase:"<
cin>>phrase;

cout<
return 0;
}

Risposte
hee136
Prima di buttarti a scrivere codice, prova prima ad elencare a parole i passi che l'algoritmo deve compiere.
Secondariamente è ricorsiva la funzione che hai scritto?

InCuBuS_89
io ho pensato di fare così...data la stringa, estraggo il primo carattere, quindi mi rimane la sottostringa ''resto'' a cui posso applicare di nuovo lo stesso procedimento..e così via...purtroppo è il primo esercizio che faccio sulle funzioni ricorsive quindi non so se quello che ho pensato possa essere giusto!

hee136
Avevo sbagliato a leggere, scusa.

L'algoritmo è giusto. Manca solo una cosa.
Carattere per carattere lui esegue l'inversione. Poi cosa succede ad un certo punto?

InCuBuS_89
finisce la stringa...ah forse devo mettere la condizione che la stringa deve essere diversa da '' '' (stringa vuota)?

InCuBuS_89
si adesso funziona! grazie tante per l'aiuto!!!

giozh
in aggiunta a quanto detto fin'ora, un consiglio "realizzativo". ogni volta che implementi una qualsiasi funzione ricorsiva, che questa sia composta da uno o piu passi base, e da un passo ricorsivo. i passi base sono fondamentali, perchè ti permettono di far terminare la ricorsione (immagina se scrivi una funzione che calcola ricorsivamente il fattoriale di un numero. se non metti il passo base
 if(n==0)
   return 1

hai una ricorsione infinita)

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.