c - 我的二进制搜索功能无法正常工作

标签 c arrays recursion binary-search

首先,对不起我的英语,它不是我的母语。

大家好,我的二分搜索功能有问题。我需要做一个二进制搜索的递归函数(使用C语言),使用 bool 类型,这里是:

bool binary_search(int x, int array[], int m, int n){
  int middle=(m+n)/2;
  if(m>n) return(0);
  else if(x == array[middle]) return(1);
  else if(x < array[middle]) return(binary_search(x, array, m, middle-1));
  else return(binary_search(x, array, middle+1, n));
}

这是主函数中的调用:

printf("type the element to search: \n"); scanf("%d", &x);
if(binary_search(x, A, 0,dim-1)) printf("Found!\n");
else printf("Not found!\n");

问题是,即使元素不在数组中,它也总是返回“未找到”。我试图更改 if 命令中的逻辑,但它只是让所有结果都变成“找到”。如果有人能提供帮助,我会很高兴。

更新:我更改了“=”的问题,但输出仍然错误,我打印了函数的输出,它始终为零

最佳答案

下面一行有严重的问题:

else if(x = array[middle]) return(1);

您不是将 xarray[middle] 进行比较,而是将 array[middle] 的值分配给 x。如果这个值不为零,它将始终计算为真,因此您的函数将始终在该点返回。您应该使用比较相等性的 ==,而不是表示赋值的 =

这是初级 C 程序员中极其常见的错误,因此您可能想知道为什么 A = B 在 C 中甚至是一个表达式,而不是像 Python 中那样的语句。 (事后?)理由是有时能够在表达式中分配变量非常方便。考虑:

char *error;
if ((error = do_something()) != NULL) {
    printf("error: %s\n", error);
    // ...
}

关于c - 我的二进制搜索功能无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27510829/

相关文章:

c - 单步执行指向字符串的指针数组 - "lvalue required as increment operand"

python - 骑士之旅(含回溯)

c++ - 选酒动态规划

JavaScript - 数组的所有可能组合

c - 将指针分配给指针

c - 如何使用 pebble c 读取文件?

c - 在 C 中使用 pow()

javascript - js对象之间的区别

PHP 扩展函数 array_init 抛出 'return_value is undeclared'

javascript - 如何在按钮单击时检查 javascript 中的许多自定义函数中最后调用的是哪个函数?