0

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 は検索対象の値です。

4

3 に答える 3

3

aではなく、単に渡す必要がありa[]ます。このような:

 return binSearch(val, a, size);
于 2012-04-23T02:58:39.510 に答える
1

*

#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);
}

*

于 2013-08-08T16:38:58.893 に答える
0

コードに重大なバグがあります。このようなアルゴリズムを作成するときは、時間をかけてテスト ケースをリストする必要があります。包括的にテストするには、次のすべての組み合わせをチェックするいくつかのループを作成します。

  • 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);
    }

頭の中でいくつかのそのようなケースを処理したとしても、バグを見つける可能性があります。

于 2012-04-23T03:58:27.247 に答える