[英]Binary Search in C using recursion
该程序在查找数组中不可用的数字时崩溃。当我搜索数组中可用的元素时,代码可以完美工作。非常感谢。
#include<stdio.h>
int binarySearch(int a[],int s,int key)
{
int middle;
if(s!=1)
middle=s/2;
if(a[middle]==key)
return 1;
else if(key<a[middle])
binarySearch(a,middle,key);
else if(key>a[middle])
binarySearch(&a[middle],middle,key);
else
return 0;
}
void main()
{
int i;
int a[]={1,2,3,4,6,9,10,11};
for (i =0;i<8;i++)
printf("%i ",a[i]);
if(binarySearch(a,8,5))
printf("\nFound");
else
printf("\nNot Found");
}
代码if(key<a[middle])binarySearch(a,middle,key);
不返回任何东西。
尝试if(key<a[middle]) return binarySearch(a,middle,key);
这可能仍然无法按预期工作,但是至少您会越过主要的,立即可见的,导致递归失控的原因。
更改
if(s!=1)
middle=s/2;
if(a[middle]==key)
return 1;
else if(key<a[middle])binarySearch(a,middle,key);
else if(key>a[middle])binarySearch(&a[middle],middle,key);
至
if (s != 1){
middle = s / 2;
if (a[middle] == key)
return 1;
else if (key<a[middle])binarySearch(a, middle, key);
else if (key>a[middle])binarySearch(&a[middle], middle, key);
}
仅当s!=1
时才初始化变量middle
。
我已经运行了这段代码,并获得了输入5
的值Not Found
。
如果您在发布模式下运行代码,请尝试在调试模式下进行构建,然后逐步运行,您将看到直接使用Middle而不分配特定值时会发生什么。 这是有害的。
希望这可以帮助。
因为在任何情况下s == 1都是不可能的。“ Middle”未初始化并且a [middle]可能会崩溃,否则它将变为无限大。
一些注意事项:
递归函数的每个分支都应返回一些内容。 您需要修改递归调用才能返回调用
更改
binarySearch(a, middle, key)
至
return binarySearch(a, middle, key)
另外,请确保中间值计算正确。 在s == 1的情况下,您没有正确地对其进行初始化。您可能希望将其从0开始。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.