設定した配列に対して(要素は知らないものとする)探したい値が配列内にあればその添字を、なければ-1を返したいです。
現状はgccでコンパイルすると32:2: error: initializer element is not constant static int right = n - 1;とエラーが表示されます。
これは変数の値を代入することで初期化はできないということは理解しているつもりなのですが手詰まりでどうしようもない状態です。
引数int b_search(int x, int v[], int n)はこの表現のもとでどのようにしたらよいのかご教授お願いします。
#include<stdio.h>
int b_search(int x, int v[], int n);
int main(void)
{
int v[] = {1, 3, 5, 8, 12, 16, 19, 24, 26, 31, 35, 38, 40, 46, 47, 51, 63}; /* 配列を設定 */
int number = sizeof(v)/sizeof(int); /*配列の要素数を計算*/
int x, z;
printf("探したい値を入力してください:");
scanf("%d", &x);
z = b_search(x, v, number);
if(z == -1)
{
printf("存在しないので-1が返された\n");
}
else
{
printf("%dの場所は%d番目である\n", x, z);
}
return 0;
}
int b_search(int x, int v[], int n)
{
static int left = 0;
static int right = n - 1;
int m;
if(left > right)
{
return -1;
}
m = (left + right)/2;
if(left == right)
{
return -1;
}
if(x == v[m])
{
return m;
}
else if(x < v[m])
{
right = m - 1;
return b_search(x, v, right);
}
else
{
left = m + 1;
return b_search(x, v, left);
}
return 0;
}