gpt4 book ai didi

c - C 调试中的递归线性搜索

转载 作者:行者123 更新时间:2023-11-30 21:15:19 24 4
gpt4 key购买 nike

问题:1在此代码中,如果我搜索不在数组中的数字,它应该显示未找到值,但我不知道它没有显示该消息,而是每次显示在元素-5中找到值时我不知道为什么会发生这种情况。

#include<stdio.h>
#define SIZE 100

size_t linearSearch(const int array[], int key, size_t size);

int main(void)
{

int a[SIZE];
size_t x;
int searchKey;
size_t element;


for(x=0; x<SIZE; ++x){
a[x] = 2*x;
}

for(x=0; x<SIZE; ++x){
if(x%10 == 0){
puts("");
}
printf("%5d", a[x]);
}

puts("\n\nEnter integer search key:");
scanf("%d", &searchKey);

// attempt to locate searchKey in array a
element = linearSearch(a, searchKey, SIZE);

// display results
if(element != -1){
printf("Found value in element %d", element);
}
else{
puts("Value not found");
}
}

size_t linearSearch(const int array[], int key, size_t size)
{
if(size<0){
return -1;
}
if(key == array[size-1]){
return size-1;
}
return linearSearch(array, key, size-1);

}

问题:2

我不明白怎么办

size_t linearSearch(const int array[], int key, size_t size)

专门工作这些行的函数

if(key == array[size-1]){
return size-1;
return linearSearch(array, key, size-1);

最佳答案

正如大家所说,你有一个小错误,那就是你应该写if(size==0)不是if(size<0).

让我解释一下 linearSearch() 中递归发生了什么功能

size_t linearSearch(const int array[], int key, size_t size)
{
if(size == 0){
return -1;
}
else
if(key == array[size-1]){
return size-1;
}
else{
return linearSearch(array, key, size-1);
}
}

假设您输入了 198作为搜索键。当您调用linearSearch()时函数由语句

element = linearSearch(a, searchKey, SIZE);

您正在传递对 array[], searchKey 198, and Size 100 的引用作为论证。

在线性搜索函数中第一个if语句if(size==0)检查大小是否等于零,如果不为零,则运行 else if 语句。

在 else if 语句中 If(198 == array[100-1])检查条件。我们看到198存在于 array[99]因此 else if 条件为 true,因此 LinearSearch 函数返回 99 作为结果。

现在让我们看看如果输入 55 会发生什么不在数组列表中。if(size==0) 不为 true,因此程序将跳过它并转到下一条语句。 if(55 == array[100-1]将被检查,因为它不正确,然后 linearSearch(array, 55, 100-1)将被调用。再次if(55==array[99-1])将被检查。在某些时候大小将变为 0。第一个 if(size==0)语句将执行。

关于c - C 调试中的递归线性搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39839328/

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