示例:使用递归反转句子。
#include <iostream>
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));
}
}
输出
Enter a sentence: margorp emosewa awesome program
在此程序中,用户被要求输入一个字符串,该字符串存储在字符串对象str中。
然后,调用 reverse()
函数,这是一个递归函数。
在此函数中,我们将输入字符串的大小存储在 numOfChars 变量中。
在第一次函数调用中,reverse()
使用以下代码打印字符串的最后一个字符:
cout << str[numOfChars - 1];
请记住,字符串实际上是**字符数组**,因此字符串的每个单独字符都可以表示为字符串数组 str[] 的一个索引。
在下一行,调用递归函数:
reverse(str.substr(0, numOfChars - 1));
这里,substr()
获取到倒数第二个字符之前的字符串,然后再次传递给 reverse()
函数。
在下一次 reverse()
调用中,打印倒数第二个字符,因为字符串比上一次少了一个字符。之后,字符串再次从末尾去掉一个字符,并传递给 reverse()
函数。
这会一直进行,直到字符串长度等于 1,此时打印最后一个(或第一个)字符,循环结束。