Ця програма бере речення від користувача і відміняє це речення за допомогою рекурсії. Ця програма не використовує рядок для звороту речення або збереження речення.
Щоб зрозуміти цей приклад, ви повинні знати наступні теми програмування на C ++:
- Функції C ++
- Типи користувацьких функцій у C ++
- Рекурсія С ++
- C ++ if, if … else та вкладений if … else
Приклад: Змінити речення за допомогою рекурсії.
#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)); ) )
Вихідні дані
Введіть речення: дивовижна програма margorp emosewa
У цій програмі користувачеві пропонується ввести рядок, який зберігається в рядковому об'єкті str.
Потім reverse()
викликається функція, яка є рекурсивною.
Усередині цієї функції ми зберігаємо розмір вхідного рядка у змінній numOfChars.
Під час першого виклику функції reverse()
друкує останній символ рядка з кодом:
cout << str(numOfChars - 1);
Пам'ятайте, що рядки насправді є масивами символів , тому кожен окремий символ рядка може бути представлений як індекс масиву рядків str ().
У наступному рядку називається рекурсивна функція:
reverse(str.substr(0, numOfChars - 1));
Тут substr()
видається рядок до 2-го останнього символу, який знову передається reverse()
функції.
У наступному reverse()
дзвінку друкується другий останній символ, оскільки рядок містить один символ менше від останнього. Після цього один символ останнього знову відсікається від рядка і передається reverse()
функції.
Це триває до тих пір, поки довжина рядка не дорівнює 1, коли друкується кінцевий символ (або перший символ) і цикл закінчується.