Ovaj program uzima rečenicu od korisnika i obrće je rečenicom pomoću rekurzije. Ovaj program ne koristi niz za preokretanje rečenice ili spremanje rečenice.
Da biste razumjeli ovaj primjer, trebali biste imati znanje o sljedećim temama programiranja na C ++:
- C ++ funkcije
- Vrste korisnički definiranih funkcija u C ++
- C ++ Rekurzija
- C ++ ako, ako … drugo i ugniježđeno ako … drugo
Primjer: Obrni rečenicu pomoću rekurzije.
#include using namespace std; // function prototype void reverse(const string& a); int main() ( string str; cout << " Please enter a string " << endl; getline(cin, str); // function call reverse(str); return 0; ) // function definition void reverse(const string& str) ( // store the size of the string size_t numOfChars = str.size(); if(numOfChars == 1) ( cout << str << endl; ) else ( cout << str(numOfChars - 1); // function recursion reverse(str.substr(0, numOfChars - 1)); ) )
Izlaz
Unesite rečenicu: strašan program margorp emosewa
U ovom programu od korisnika se traži da unese niz koji je pohranjen u objekt niza str.
Zatim reverse()
se poziva funkcija koja je rekurzivna.
Unutar ove funkcije veličinu ulaznog niza pohranjujemo u varijablu numOfChars.
U prvom pozivu funkcije reverse()
ispisuje zadnji znak niza s kodom:
cout << str(numOfChars - 1);
Zapamtite da su nizovi zapravo nizovi znakova , tako da se svaki pojedinačni znak niza može predstaviti kao indeks niza niza str ().
U sljedećem se retku rekurzivna funkcija naziva:
reverse(str.substr(0, numOfChars - 1));
Ovdje substr()
daje niz do 2. zadnjeg znaka, koji se ponovo prosljeđuje reverse()
funkciji.
U sljedećem reverse()
pozivu ispisuje se drugi zadnji znak jer niz sadrži jedan znak manje od zadnjeg. Nakon toga, jedan znak iz zadnjeg ponovno je odsječen iz niza i proslijeđen reverse()
funkciji.
To traje sve dok duljina niza ne bude jednaka 1, kada se ispiše završni znak (ili prvi znak) i petlja završi.