Tento program vezme vetu od používateľa a obráti ju pomocou rekurzie. Tento program nepoužíva reťazec na obrátenie vety alebo na uloženie vety.
Aby ste pochopili tento príklad, mali by ste mať znalosti nasledujúcich programovacích tém C ++:
- Funkcie C ++
- Typy funkcií definovaných používateľom v jazyku C ++
- C ++ rekurzia
- C ++ ak, ak … inak a Vnorené, ak … inak
Príklad: Obrátenie vety pomocou rekurzie.
#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)); ) )
Výkon
Zadajte vetu: úžasný program margorp emosewa
V tomto programe je užívateľ vyzvaný na zadanie reťazca, ktorý je uložený v objekte reťazca str.
Potom reverse()sa volá funkcia, ktorá je rekurzívnou funkciou.
Vo vnútri tejto funkcie ukladáme veľkosť vstupného reťazca do premennej numOfChars.
Pri prvom volaní funkcie reverse()vytlačí posledný znak reťazca s kódom:
cout << str(numOfChars - 1);
Pamätajte, že reťazce sú v skutočnosti polia znakov , takže každý jednotlivý znak reťazca môže byť reprezentovaný ako index poľa reťazcov str ().
V ďalšom riadku sa rekurzívna funkcia nazýva:
reverse(str.substr(0, numOfChars - 1));
Tu substr()dáva reťazec až druhému poslednému znaku, ktorý sa znova odovzdá reverse()funkcii.
Pri nasledujúcom reverse()hovore sa vytlačí druhý posledný znak, pretože reťazec obsahuje o jeden znak menej ako posledný. Potom sa jeden znak z posledného znova odreže z reťazca a odovzdá sa reverse()funkcii.
To trvá, kým sa dĺžka reťazca nebude rovnať 1, keď sa vytlačí posledný znak (alebo prvý znak) a slučka sa skončí.








