c++ - 查找数组中第一个错误的递归函数

标签 c++ recursion

我正在尝试解决一个问题,该问题要求返回数组中 somePredicate 函数返回 false 的第一个元素的下标。如果不存在该元素,则返回-1。

请注意,我需要使用 somePredicate 来评估正确性 数组中的每个元素,我的 firstFalse 函数中不能有任何循环。

我的函数是这样的

int firstFalse(const string a[], int n)

其中a[]是一个字符串数组,n是数组中元素的个数

这里是 somePredicate 函数

bool somePredicate(string s)
{

    int nDigits = 0;
    for (int k = 0; k != s.size(); k++)
    {
        if (isdigit(s[k]))
            nDigits++;
    }

    return nDigits == 5;
}

我只是在学习递归是如何工作的,这是一场噩梦,我在这个特定问题上花了 3 个小时,但没有运气。请有人解释一下我需要在这里先行的逻辑。我在某种程度上理解递归的工作原理,但我无法从逻辑上弄清楚如何解决这个问题。

最佳答案

您的问题暗示您必须使用递归。好的,现在尝试将其分解为合乎逻辑的步骤。

1) 你要确定一个大小为“n”的数组

2) 如果数组为空,即n=0,答案显而易见。你没有找到这样的元素,所以你返回 -1

3) 如果数组不为空,则递归调用您的函数以获得大小为 n-1 的数组。

4) 您的递归调用是否返回了答案?假设递归调用返回大小为 n-1 的数组的正确答案,也就是说,如果它返回的不是 -1,那么您将返回大小为数组的相同答案n.

5) 否则,如果递归调用返回 -1,则一定意味着对于大小为 n-1 的数组,谓词函数对所有元素都返回 true(或者数组为空) .在这种情况下,答案很明显:为元素数组 [n-1](您现在正在检查的 n 大小的数组中的最后一个元素)调用谓词函数。如果它返回 false,那么大小为 n 的数组中的最后一个元素是谓词函数为其返回 false 的第一个这样的元素,因此您返回 n-1,否则返回值为 -1,因为谓词函数尚未返回 true。

现在,将上面的代码翻译成代码,你就会得到答案。

关于c++ - 查找数组中第一个错误的递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29997720/

相关文章:

C++ 11 避免 "Call Super"代码异味

c++ - 如何将写入标准输出的数据保存到本地缓冲区

c++ - boost 单元测试异常检查异常失败

java - 如何从 for 循环关系中创建循环关系

python - 递归累积或如何计算 Python 中的递归调用次数?

c++ - 有什么办法可以反编译Linux .so?

C++ 继承 : Derived class pointer to a Base class invokes Derived class method

json - PostgreSQL 中的递归 JSON 生成

Java堆栈溢出与递归

c - 递归函数输出不正确以计算数字的数字总和