# C++ 程序：使用递归来反转句子

> 原文： [https://www.programiz.com/cpp-programming/examples/reverse-sentence-recursion](https://www.programiz.com/cpp-programming/examples/reverse-sentence-recursion)

#### 该程序从用户处获取一个句子，然后使用递归将其反转。 该程序不使用字符串来反转句子或存储句子。

要理解此示例，您应该了解以下 [C++ 编程](/cpp-programming "C++ tutorial")主题：

*   [C++ 函数](/cpp-programming/function)
*   [C++ 中用户定义函数的类型](/cpp-programming/user-defined-function-types)
*   [C++ 递归](/cpp-programming/recursion)
*   [C++ `if`，`if...else`和嵌套`if...else`](/cpp-programming/if-else)

* * *

## 示例：使用递归反转句子

```cpp
#include <iostream>
using namespace std;

void reverse(const string& a);

int main()
{
    string str;
    cout << " Please enter a string " << endl;
    getline(cin, str);
    reverse(str);
    return 0;    
}

void reverse(const string& str)
{
    size_t numOfChars = str.size();

    if(numOfChars == 1)
       cout << str << endl;
    else
    {
       cout << str[numOfChars - 1];
       reverse(str.substr(0, numOfChars - 1));
    }
} 
```

**输出**

```cpp
Enter a sentence: margorp emosewa
awesome program

```

在该程序中，要求用户输入存储在字符串对象`str`中的字符串。

然后，调用`reverse()`函数，它是一个递归函数。 在第一个函数调用中，`reverse()`打印字符串的最后一个字符（`numOfChars - 1`），-1，因为数组从 0 开始。

然后，`substr()`给出字符串，直到最后一个第二个字符，然后再次将其传递给`reverse()`函数。

在下一个`reverse()`调用中，将打印倒数第二个字符，因为该字符串比倒数少一个字符。 此后，再次从字符串中截取最后一个字符，并将其传递给`reverse()`函数。

直到输出最后一个字符（或第一个字符）并结束循环时，字符串的长度才等于 1。