簡體   English   中英

C語言中的遞歸二進制搜索程序

[英]Recursive binary search program in C

我正在嘗試在C中創建一個遞歸二進制搜索函數。我想擁有它,但是當我嘗試編譯時,兩個遞歸調用都出現錯誤“在']'標記之前有預期的主表達式”。 有人知道為什么會這樣嗎?

我的功能:

int binSearch(int val, int a[], int size)
{
         int mid;
         mid=(size)/2;
         if(val==a[mid]) return a[mid];
         else if(val<a[mid]) {
              return binSearch(val, a[], (size-mid));
         }
         else if(val>a[mid]) {
              return binSearch(val, a[], size);
         }
         else return(-1);
 }

其中a []是排序后的數組,size是數組的大小,val是要搜索的值。

您只需要傳遞a而不是a[] 像這樣:

 return binSearch(val, a, size);

*

#include<stdio.h>
main()
{
    int arr[20],start,end,middle,n,i,item;
    printf("How many elements you want to enter in the array : ");
    scanf("%d",&n);
    for(i=0; i < n; i++)
    {
      printf("Enter element %d : ",i+1);
      scanf("%d",&arr[i]);
    }
    printf("Enter the element to be searched : ");
    scanf("%d",&item);
    start=0;
    end=n-1;
    middle=(start+end)/2;
    while(item != arr[middle] && start <= end)
    {
      if(item > arr[middle])
        start=middle+1;
      else
        end=middle-1;
      middle=(start+end)/2;
    }
    if(item==arr[middle])
      printf("%d found at position %d\n",item,middle+1);
    if(start>end)
      printf("%d not found in array\n",item);
}

*

您的代碼有一個嚴重的錯誤。 在編寫此類算法時,您應該花一些時間列出測試用例。 為了進行全面測試,我將編寫一些循環來檢查以下所有組合:

  • 檢查它是否適用於0、1、2、3、4個輸入元素(元素值間隔開,以便您可以在現有元素之間搜索值),查找小於/等於/大於這些元素中每個元素的元素

這是測試工具的一些示例代碼,只是為了讓您入門...

int inputs[] = { 10, 20, 30, 40 };

for (int size = 0; size < 4; ++size)
    for (int i = 0; i <= size; ++i)
    {
        assert(binSearch(inputs[i], inputs, size) == (i == 0 ? -1 : i));
        assert(binSearch(inputs[i] - 5, inputs, size) == -1);
        assert(binSearch(inputs[i] + 5, inputs, size) == -1);
    }

即使您腦子里經歷了幾次這樣的情況,您也很可能會發現該錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM