我使用递归调用制作二进制搜索程序(忽略printf语句)。在运行程序时,您将意识到它运行正常并获取要找到的元素的索引,但是:
#kill pid
os.kill(pid, signal.SIGTERM)
#wait for pid to release it back to the system
#this will block until the child is dead
os.waitpid(pid,0)
它不会返回mid,而是返回0。 (我尝试过0以外的值)。
我也尝试在结束时返回mid而不是返回0.它总是返回4.
整个代码是:
else if (element == arr[mid])
{
printf("\n%d\nmid = %d\nstart = %d\nend = %d\n\n", i, mid,start,end);
return mid;
}
答案 0 :(得分:0)
该函数返回0
因为这些语句
BinaryRecursivSearch(element, start, mid);
...
BinaryRecursivSearch(element, mid, end);
应该是
return BinaryRecursivSearch(element, start, mid);
...
return BinaryRecursivSearch(element, mid, end);
因为他们没有返回任何内容,所以最终的声明被执行
return 0;
答案 1 :(得分:0)
我的功能没有任何意义。 例如,我完全不明白这段代码片段的含义
if (mid == start)
{
if(element!=end)
{
printf("\nElement not found");
return -1;
}
}
考虑到数组不仅包含{0,1,2,3,4,5,6,7,8,9}中的任何值,如程序中所示。因此,此代码段对二进制搜索方法没有任何意义。尝试使用具有不同值的数组,您的程序将无法按预期工作。
或在此代码段中
else if(element< arr [mid]) BinaryRecursivSearch(element,start,mid);
else if(element> arr [mid]) BinaryRecursivSearch(element,mid,end);
您不使用函数BinaryRecursivSearch返回的值。
我建议写一个简单的递归函数
这是一个演示程序,显示如何编写函数
#include <stdio.h>
int binary_search( const int a[], int n, int value )
{
int middle;
if ( n == 0 ) return -1;
middle = n / 2;
if ( value < a[middle] )
{
return binary_search( a, middle, value );
}
else if ( a[middle] < value )
{
int index = binary_search( a + middle + 1, n - middle - 1, value );
return index == -1 ? -1 : index + middle + 1;
}
return middle;
}
#define N 10
int main(void)
{
int a[N] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
for ( int i = 0; i < N; i++ ) printf( "%d ", a[i] );
printf( "\n" );
for ( int i = -1; i <= N; i++ )
{
printf( "%d has index %d\n", i, binary_search( a, N, i ) );
}
return 0;
}
程序输出
0 1 2 3 4 5 6 7 8 9
-1 has index -1
0 has index 0
1 has index 1
2 has index 2
3 has index 3
4 has index 4
5 has index 5
6 has index 6
7 has index 7
8 has index 8
9 has index 9
10 has index -1