gpt4 book ai didi

检查一个元素是否在数组中或者不是无限循环

转载 作者:行者123 更新时间:2023-11-30 16:30:35 25 4
gpt4 key购买 nike

我试图在登录时间内查看一个数字是否在数组中,但此函数执行

else if(arr[(r-l)/2] < n) 

一直这样,就变成了无限循环。这是为什么?

int exists(int n, int *arr, int l, int r){
if(l == r){

if(arr[l] == n){
return 1;
}
else{
return 0;
}
}
else if(arr[(r-l)/2] == n){
return 1;
}
else if(arr[(r-l)/2] > n){
return exists(n, arr, l, (r-l)/2);
}
else if(arr[(r-l)/2] < n){
return exists(n, arr, (r-l)/2, r);
}
}

int main(){
node *root = NULL;

int arr[5] = {1,2,3,4,5};
printf("%d", exists(5, arr, 0, 4));

}

最佳答案

好吧,如果

else if (arr[(r-l)/2] == n) {

正在执行,那么是因为

if (l == r) {

错误

看起来您正在尝试进行二分搜索,如果是这样,则您的索引计算都是错误的。

int exists(int n, int *arr, int l, int r) {
if (l <= r) {
int mid = (l + r) / 2;
if (arr[mid] == n) {
return 1;
} else if (arr[mid] > n) {
return exists(n, arr, l, mid - 1);
} else {
return exists(n, arr, mid + 1, r);
}
}

return 0;
}

关于检查一个元素是否在数组中或者不是无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51052174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com