I'm trying to write a function that gets an array, it's size and the number I'm looking for. The function should be recursive.
That's what I've written, it doesn't work. I don' understand why. Suggestions are welcome.

``````#include <stdio.h>
int binary (int *a, int n, int num)
{
int temp = n/2;
int c = -1;
if (n==1)
{
if (*a == num)
return (*a-1);
else return c;
}

if (a[temp] < num)
return binary ((a+temp+1), (temp-1), num);
else return binary (a, (temp+1), num);

return (a + temp) ;
}

int main (void)
{

int a = {1, 2, 3, 4, 5};
int n = 5, num =0;
printf ("%d", binary (a, n, num));
return 0;
}``````

Plus, I'm looking for programs that use backtracking, or some explanation on te subject of backtracking. Anyone know any helpful sites?
Thanks, S.u.s.h.i.

## All 6 Replies

Why does it need to be recursive? Just because that's the assignment? Non-recursive binary searches are one of life's simple beauties.

In this case, stepping through a debugger would be helpful, but you don't return the value when its found because you test for < num but not == num. that is, you say if a[temp] < num binary(upper half) else binary(lower half); you forgot if a[temp] == num return temp.

More than that, though is the question "what does the routine return" I would think you want to return the INDEX of where it is found; it looks like you are returning the contents sometimes.

``````#include<stdio.h>
#include<conio.h>
void main()
{
int a,i,item;
void binary(int x,int beg,int end,int y);
clrscr();
for(i=0;i<10;i++)
{
printf("enter no.:");
scanf("%d",&a[i]);
}
printf("enter no. to be found:");
scanf("%d",&item);
binary(a,0,9,item);
getch();
}
void binary(int x,int beg,int end,int y)
{
int mid,z;
if(beg<=end)
{
mid=(beg+end)/2;
if(x[mid]==y)
{
printf("number found");
}
if(y<x[mid])
{
end=mid-1;
binary(x,beg,end,y);
}
else
{
beg=mid+1;
binary(x,beg,end,y);
}
}
}``````
commented: What a great first post... not -2

When somebody bumps a thread that hasn't been touched in years to post code, it's pretty much always crap riddled with poor practices. Coincidence? Probably not. :icon_rolleyes:

Great Binary Search Recursive Function.
Cheers. :)

``````#include<stdio.h>
#include<conio.h>
void main()
{
int a,i,item;
void binary(int x,int beg,int end,int y);
clrscr();
for(i=0;i<10;i++)
{
printf("enter no.:");
scanf("%d",&a[i]);
}
printf("enter no. to be found:");
scanf("%d",&item);
binary(a,0,9,item);
getch();
}
void binary(int x,int beg,int end,int y)
{
int mid,z;
if(beg<=end)
{
mid=(beg+end)/2;
if(x[mid]==y)
{
printf("number found");
}
if(y<x[mid])
{
end=mid-1;
binary(x,beg,end,y);
}
else
{
beg=mid+1;
binary(x,beg,end,y);
}
}
}``````

please tell how can i run this programe in c++ data structure

``````#include<iostream>
#include<conio.h>
using namespace std;
int binarysearch(int a[],int n,int low,int high)
{ int mid;
if (low > high)
return -1;
mid = (low + high)/2;
if(n == a[mid])
{ cout<<"the element found";
return 0;
}
if(n < a[mid])
{ high = mid - 1;
binarysearch(a,n,low,high);
}
else if(n > a[mid])
{ low = mid + 1;
binarysearch(a,n,low,high);
}
}

main()
{ int a;
int n,no,x,result;
cout<<"Enter the number of terms : "<<endl;
//printf("Enter the elements :\n");
//for(x=0;x<50;x++)

//cout<<"Enter the number to be searched : ";

result = binarysearch(a,n,0,no-1);
if(result == -1)