这个递归代码有什么问题?

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 *)

  • 该死的......我的老板摇摆不定,我不得不打字...... +1:D (5认同)