You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用递归与数组指针统计数组中指定范围数字数量的问题求助

解决递归统计数组范围内数字数量的问题

我完全理解你卡在这一步的烦躁——递归结合指针确实容易绕弯子,尤其是你已经完成了其他两个功能,就差这最后一个了。咱们先拆解你当前代码里的问题,然后一步步修正它。

你的当前代码存在的问题

看你写的numberOfValuesInRange函数,有三个关键错误:

  1. 判断条件完全偏离需求:你写的min+max - *pBegin >= min+max等价于-*pBegin >= 0(两边减去min+max),也就是判断当前元素是否小于等于0,这和你要检查的[min, max]范围完全不相关。
  2. 递归时没有移动指针:你递归调用的是numberOfValuesInRange(min, max, pBegin, pEnd),pBegin没有往后移动,这会导致无限递归,永远达不到pBegin >= pEnd的终止条件。
  3. 没有正确累计计数:你没有根据当前元素是否符合条件来增加计数,只是返回0加递归结果,这肯定得不到正确的总数。

修正后的递归函数

这里是可以正常工作的版本,每一步都有注释说明:

int numberOfValuesInRange(float min, float max, const float *pBegin, const float *pEnd){
    // Base case:指针已经走到数组末尾,没有元素可检查,返回0
    if(pBegin >= pEnd)
        return 0;
    
    // 判断当前元素是否在指定范围内,符合条件则计1,否则计0
    int currentCount = (*pBegin >= min && *pBegin <= max) ? 1 : 0;
    
    // 递归处理下一个元素,把当前计数加上后续元素的统计结果
    return currentCount + numberOfValuesInRange(min, max, pBegin + 1, pEnd);
}

补充:修正你的hasValueInRange函数

顺便提一句,你当前的hasValueInRange其实没有真正递归遍历整个数组——它只检查了第一个元素,就直接返回结果了。如果第一个元素不在范围内,但后面的元素符合条件,这个函数会错误地返回false。这里是修正后的递归版本:

bool hasValueInRange(float min, float max, const float *pBegin, const float *pEnd){
    // Base case:遍历完所有元素都没找到符合条件的,返回false
    if(pBegin >= pEnd)
        return false;
    
    // 当前元素在范围内,直接返回true
    if(*pBegin >= min && *pBegin <= max)
        return true;
    
    // 否则递归检查下一个元素
    return hasValueInRange(min, max, pBegin + 1, pEnd);
}

测试验证

现在调用numberOfValuesInRange(2,5, &sampleArray[0], &sampleArray[size]),数组里的2和4符合[2,5]的范围,函数会正确返回2,和你的预期一致。

内容的提问来源于stack exchange,提问作者EriPeri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 11:07:29