如何使O(n)的功能检查字母(上下)和()+-* /到尾递归?

时间:2019-05-24 12:54:40

标签: c++ loops recursion

我试图弄清楚如何将我制作的用于检查传递的字符串的函数转换为仅包含字母(小写或大写)并且仅将这些标点符号()+-* / ....转换为有效的递归函数,可能通过尾递归。这是我的代码:

/*typedef std::string StringElem;*/
bool verify_input_str(StringElem str_para) {
  for (int x = 0; x < str_para.size(); ++x) {
    if (!(std::isalpha(str_para[x])) && (str_para[x] != '*')&& (str_para[x] != '/')
        && (str_para[x] != '+') && (str_para[x] != '-') && (str_para[x] != ')')
        && (str_para[x] != '(')) {
        return 0;
    }
  }
return 1;
}

谁能给我一个提示,我将不胜感激。谢谢,期待您的建议。

1 个答案:

答案 0 :(得分:4)

由于尾​​部递归要求在递归调用之后不执行任何计算,因此这里的方法非常简单:

  • 从包含pos中当前位置StringElement的签名开始
  • 首先检查边界条件;如果字符串为空,则返回成功
  • 接下来,检查当前字符;如果无效,则返回失败
  • 最后,返回用pos+1调用函数本身的结果。

注意:我假设您正在通过尾部递归进行学习,因为否则基于循环的实现将是一个很好的方法。