Alt*_*lti 1 c++ stack-overflow recursion
我正在使用CodeLab for C++进行在线工作,我不确定我的代码有什么问题.这是一个问题:
编写一个递归的,值为int的函数len,它接受一个字符串并返回字符串中的字符数.如果字符串是空字符串(""),则字符串的长度为:0.比第一个字符之外的其余字符串的长度多1个.
这是我的代码:
int len(string s)
{
if (s.length()==0)
return 0;
else
{
return 1+(len(s)-1);
}
}
Run Code Online (Sandbox Code Playgroud)
它说我有一个运行时错误.有帮助吗?
谢谢.
Dou*_* T. 11
那么这里:
return 1+(len(s)-1);
Run Code Online (Sandbox Code Playgroud)
字符串的长度永远不会减少.所以你最终会有一个stackoverflow因为你从来没有打过你的基本情况(s.length() == 0).你需要得到一个子串,其中s的长度减少1:
return 1+(len(s.erase(0,1))); // erases 1 char from beginning then recurses
Run Code Online (Sandbox Code Playgroud)
希望这纯粹是学术性的,因为std::string有一种length方法可以在恒定的时间内运行.(更不用说从字符串前面删除可能非常低效 - 请参阅其他可用的答案char *)