C调试中的递归线性搜索

时间:2016-10-03 19:49:49

标签: c linear-search

问题:1 在此代码中,如果我搜索不在数组中的数字,则应显示Value not found,但我不知道它每次显示{{1}时都不显示该消息我不知道为什么会发生这种情况。

Found value in element -5

问题:2

我无法理解

  

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

功能特别是这些行

#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);

}

3 个答案:

答案 0 :(得分:2)

1)主要问题是if(size<0){。条件表达式始终为false。因为size_t是无符号整数。因此,它返回一个随机位置,其中找到的值(它的未定义行为)偶然变为大数(例如,-5为4294967291为无符号),没有结束(未找到)。

if(size<0){应为if(size==0){

2)如果键匹配最后一个元素,则返回其位置。如果没有,请重复较短的一个尺寸。如果大小为零,则找不到密钥。

答案 1 :(得分:2)

正如大家都说你有一点错误,你应该写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作为searchkey。 当您通过语句

调用linearSearch()函数时
element = linearSearch(a, searchKey, SIZE);

您将array[], searchKey 198, and Size 100的引用作为参数传递。

在linearSearch函数中,首先if语句if(size==0)检查大小是否等于零,否则if if else语句运行。

in else if if语句If(198 == array[100-1])条件被选中。 我们看到198中存在array[99]所以else if条件为true,因此linearSearch函数返回99作为结果。

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

答案 2 :(得分:1)

只需将if语句从if(size<0)更改为if(size==0)您的代码即可运行。