這是我的代碼:功能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