Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使O(n)的功能检查字母(上下)&;()+;-*/到尾部递归?_C++_Loops_Recursion - Fatal编程技术网

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

C++ 如何使O(n)的功能检查字母(上下)&;()+;-*/到尾部递归?,c++,loops,recursion,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]))

我试图弄清楚如何将我所做的检查传递字符串的函数(如果它只包含字母(小写或大写)和这些标点符号()+-*/..)转换为有效的递归函数,可能是通过尾部递归。这是我的密码:

/*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;
}
/*typedef std::string StringElem*/
bool验证输入(StringElem str段){
对于(int x=0;x

谁能给我一个提示,我会非常感激的。谢谢,期待您的建议。

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

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

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

可能的逻辑错误:我认为您的意思是使用
|
而不是
&
。使用后者意味着一个字符可以同时是*/+-字符(可能在量子世界?)。实际上,我认为整个循环有一个逻辑错误@是的,我也这么想。让我编辑一下。对不起,为什么要将其转换为递归?我看不出递归怎么能比你已经拥有的更好efficiency@formerlyknownas_463035818哦,好的,我想可能有更好的方法来完成这个。谢谢。是的,我在做一个书本练习,他们让我做一个循环,然后下一个问题是把它转换成尾部递归。尾部递归比其他类似这样的简单循环好吗?@ChoraMora不,它们是等价的。现代编译器将带有尾部递归的函数自动转换为循环,作为优化的一部分。@ChoraMora编译器可以进行这种转换,因此,甚至可能是迭代和递归方法会产生完全相同的代码compiler@formerlyknownas_463035818&@dasblinkenlight非常感谢您分享您的知识。我会记住这一点!你好:)