在二重数组中递归查找负数
Recursively finding a negative in an array of doubles
我的家庭作业要求我遍历一个双精度数组,并根据它是否包含负数返回true或false。问题是我必须使用递归函数,而不能使用循环。我也不能访问给定函数之外的任何函数或变量。
该函数接受两个参数:数组和要检查的元素数。
一旦它检查了指定数量的元素,我就很难让它停止递归。
//what I have so far
bool anyNegative(const double a[], int n)
{
if(n <= 0)
return false;
if(*a < 0)
return true;
anyNegative(a + 1, n);
}
首先,我想到了使用counter,但这不起作用,因为每次函数递归时都会重置它。
我还尝试将指针索引与进行比较
if(currentElement == &a[n])
其中currentElement是指向数组a的第一个元素的指针。
然而,我认为当我这样做的时候,我的程序没有工作的原因是因为每次函数递归时,"a"都被设置为一个新值,所以&a[n]将始终是currentElement前面的n个元素。
我被卡住了,如果有人能给我一个提示,那就太好了。
减小n
,因为您传递的数组较小
anyNegative(a + 1, n - 1);
您需要减少n
,并返回递归调用的值。
return anyNegative(a + 1, n - 1);
您缺少两件事,第一,您没有递减n
的值,以便达到终止条件。其次,您不会将子执行的结果返回到上层。
这是修改后的代码:
//what I have so far
bool anyNegative(const double a[], int n)
{
if(n <= 0)
return false;
if(*a < 0)
return true;
return anyNegative(a + 1, n - 1);
}
数组的大小不能为负数。所以不要做这样多余的检查
if(n <= 0)
return false;
最好将第二个参数定义为具有sizet类型。
您的函数有未定义的行为,因为当控件将实现语句时,它什么也不返回
anyNegative(a + 1, n);
而且必须是而不是上面的呼叫
anyNegative(a + 1, n -1);
我会用以下方式编写函数
bool anyNegative( const double a[], size_t n )
{
if ( n == 0 ) return false;
return ( *a < 0 ? true : anyNegative( a + 1, n - 1 ) );
}
相关文章:
- 以C++递归方式查找向量中的最大值
- 在尝试使用递归查找集合子集的总数时,我遇到了分割错误
- 使用FindFirstFile和FindNextFile递归查找具有特定扩展名的文件
- C++ [递归] 查找大于 0 的最长值序列
- 使用递归查找数组中的最大相对值
- 使用递归查找路径
- 在二重数组中递归查找负数
- 使用递归查找所有可能的子集对
- 使用结构和递归查找整数数组中的最大数字
- 搜索字符串以使用递归查找另一个字符串
- 使用递归查找字符串中的字符数
- 在C++中通过递归查找目录和子目录
- 递归查找优化
- 使用递归查找数组中的第k个最小元素
- 递归查找节点函数
- 递归查找并填充给定数组值与所有先前数组值的乘法
- c++ int数组指针递归查找质数因子
- 递归查找子字符串
- 深度优先搜索或回溯递归查找字谜/拼字板中所有可能的字母组合
- 定义使用递归查找最后一位偶数的函数