代码之家  ›  专栏  ›  技术社区  ›  rogul

错误:控件可能到达C-递归搜索中非void函数的结尾

  •  0
  • rogul  · 技术社区  · 12 年前

    我无法理解为什么会发生这种错误:错误:控件可能会到达非空函数的末尾。

    我知道,错误意味着函数可能会在不返回任何内容的情况下到达终点,但我无法理解这是如何发生的。

    我只是将一个非空数组传递给函数,如果这是值得安慰的话。

    代码如下:

    int recursivesearch(int values[], int lower, int upper, int value)
    {
        int mid = (lower+upper)/2;
        if(lower>upper)
            return false;        
        if(value>values[mid])  
            recursivesearch(values,mid+1,upper,value);
        else if(value<values[mid])
            recursivesearch(values,lower,mid-1,value);
        else
            return mid;
    }
    

    因为最后一个语句只是“else”条件,所以它将确保返回,对吗?

    2 回复  |  直到 12 年前
        1
  •  3
  •   haccks    12 年前

    因为最后一个语句只是“else”条件,所以它将确保返回,对吗?

    对但问题在于代码中的其他地方。注意,函数的返回类型是int,但在这两个函数中都没有返回任何值 if else if 陈述改变

    if(value>values[mid])  
        recursivesearch(values,mid+1,upper,value);
    else if(value<values[mid])
        recursivesearch(values,lower,mid-1,value);  
    

    if(value>values[mid])  
        return recursivesearch(values,mid+1,upper,value);
    else if(value<values[mid])
        return recursivesearch(values,lower,mid-1,value);  
    

    请参见 wiki .

        2
  •  2
  •   wolfPack88    12 年前

    如果你看看你的 if else if 块,您实际上不会从它们返回任何内容。您只需运行函数并抛出返回值。你可能想要 return recursivesearch(...) 相反