这是我的代码:功能kepps(递归C)
int Binary (int* arr, unsigned int size, int num)
{
if (0 == size)
{
return -1;
}
if (1 == size)
{
if (arr[0] == num)
{
return 0;
}
return -1;
}
size/= 2;
if (num == arr[size])
{
return size;
}
else
{
if (num < arr[size])
{
Binary (arr, size, num);
}
else
{
Binary (&arr[size+1], size, num);
}
}
return -1;
}
它不工作。 当我调试它(试图搜索一个数组中出现的数字)时,我发现它进入了'return size'行,它应该这样做(旁边的问题是否有一种方法可以将行号放入代码..),但它继续前往最后一行并返回-1。 我怎么回来,它不会离开功能? 我第一次尝试不放弃任何回报,因为我不应该达到最后,但编译器说“控制达到非void函数结束”,所以我添加了最后一个返回,但显然它不是正确的事情..
由于
这是不可能的说,因为你没有提到你正在使用的调试器的结果。但是很可能返回来自'if'的递归调用网站之一,并且调用之后的下一步是返回-1; – Gene
'二进制(&arr [size + 1],size,num);'是错误的。 :E.g'int a [] = {11,22}; int index =二进制(a,2,33);''==>'size/= 2;':'size'变成'1' ==>'二进制(&arr [size + 1],size,num);' ==>'Binary(&arr [1 + 1],1,33);':'&arr [1 + 1]'超出界限。 – BLUEPIXY