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čí.