递归函数错误
Recursive Function Error
我试图创建一个递归函数,其中包含一个数字向量并有一个键,这是我们在向量中寻找的数字。
每次找到键时,函数都应显示键在向量中出现的次数计数。
出于某种原因,我的递归函数只返回数字 1(忽略我刚刚测试的 10
)这是我的代码:
int recursive_count(const vector<int>& vec, int key, size_t start){
if (start == vec.size())
return true;
return (vec[start] == key? 23 : key)
&& recursive_count(vec, key, (start+1));
}
int main() {
vector <int> coco;
for (int i = 0; i<10; i++) {
coco.push_back(i);
}
cout << coco.size() << endl;
int j = 6;
cout << recursive_count(coco, j, 0) << endl;
}
不确定您要做什么,但照原样 - 当且仅当输入key
为 0 并且它在向量中时,您的函数才会返回 false (0)。否则,它将返回 1。
这是因为您基本上是在执行布尔 AND 操作。对于所有非 0 的值,操作数都是true
的,并且获得 0 的唯一方法是如果它在向量中 - 并且键为 0。
因此,除非一路上得到false
(0),否则布尔公式的答案是 true
,它提供了 1。
编辑:
如果您尝试计算key
在vec
中的次数 - 请执行与迭代方法相同的操作:
- 从 0 开始(将停止条件设为
return 0;
而不是return true;
) - 每当找到键时增加 1 而不是使用
operator&&
,请使用operator+
。
(我没有给出直接的完整答案,因为它看起来像硬件,尝试遵循这些提示,并询问您是否有更多问题)。
对我来说,递归函数似乎是无稽之谈,但无论如何......
考虑递归概念。
什么是中断条件?正在检查的当前字符不再在字符串中。你说得对。
但是递归案例是错误的。你返回某种布尔值(顺便说一下,23 是怎么回事?如果当前元素等于键,则一个递归轮需要返回 1,否则返回 0。
然后我们只需要将递归结果相加,我们就在那里!
这是代码
int recursive_count(const vector<int>& vec, int key, size_t start) {
if (start >= vec.size()) {
return 0;
} else {
return
((vec[start] == key) ? 1 : 0) +
recursive_count(vec, key, start+1);
}
}
由于这甚至是尾递归,好的编译器会顺便为你删除递归,并将其转换为迭代对应物......
你的recursive_count函数的计算结果总是布尔值
你要么显式返回 true
if (start == vec.size())
return true;
或返回布尔比较
return (vec[start] == key? 23 : key) // this term gets evaluated
&& // the term above and below get 'anded', which returns true or false.
recursive_count(vec, key, (start+1)) // this term gets evaluated
然后它被强制转换为您的返回类型 (int),这意味着您只会返回 0 或 1。
根据integral promotion
cppreference.com 规则
布尔类型可以转换为 int,值 false 变为 0 和 true 变为 1。
跟
if (start == vec.size())
return true;
返回类型为 int
的函数返回1
- 任何人都可以查明我的递归函数中的错误吗?
- 如何修复递归函数导致的堆栈溢出错误?C++
- 使用递归函数 (c++) 将长字符串转换为整数时输出错误
- 我在具有递归函数的这部分代码中收到此错误
- 为什么当从递归函数返回字符串到C 中的Main时,我会得到分割错误
- 递归函数在数组中找到第一个错误
- 递归函数错误 1.
- 静态短引用在递归函数中产生错误
- 理解递归函数中的错误
- 递归函数调用时block_type_is_valid错误
- 我的二进制搜索树 c++ 的递归函数中的错误 C2784 无法推断模板参数
- 递归函数错误 Dev-C++
- 在递归函数中使用迭代器会导致分段错误
- 递归函数错误
- 递归C++函数中的堆栈溢出错误
- 递归函数中迭代器的 Seg 错误
- 递归函数导致返回错误 (c++)
- 字符串递归函数中的字符串错误
- 在另一个类的函数中返回一个类,反之亦然,编译错误(递归)
- 递归函数中的分段错误