下面 C++ 代码以递归方式实现字符串反序,横线处应填上代码是( )。
//字符串反序
#include <iostream>
#include <string>
using namespace std;
string sReverse(string sIn) {
if (sIn.length() <= 1) {
return sIn;
} else {
return ________ // 此处填写代码
}
}
int main() {
string sIn;
cin >> sIn;
cout << sReverse(sIn) << endl;
return 0;
}这题考递归构造。拿到题先想:反序就是把最后一个字符提到最前面,剩下的继续递归。所以横线必须返回“末尾字符”拼上“去掉末尾后的递归结果”,顺序不能错。
最容易栽跟头的是把顺序搞反,写成先递归后半段再拼首位,那样首位就被推到了末尾,字符串没反序。还有,有些同学看到递归就只写函数调用,忘了加上当前层的字符,导致只移动了一位。另外要注意 substr 的第二个参数是长度,不是结束位置,写错参数也会直接编译错误。
【考点】递归构造|字符串操作|栈的后进先出
GESP 五级《算法与程序设计》核心考点。命题人专门卡住那些“会写递归框架但不懂递归构造”的考生——他们知道要递归,但不知道递归函数该返回什么。这道题本质是考你是否理解递归必须构造正确的返回值,而不仅仅是“能递归”。