我正在尝试解决一个问题,该问题要求返回数组中 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/