使用C语言中的递归函数在数组中搜索元素

时间:2019-06-29 15:37:59

标签: c arrays function

我是递归数组的初学者,因此需要一些指导。 我正在尝试查找数组中是否存在元素。

// Program to find whether an element exist in an array or not.
#include <stdio.h>
int arr[5]= {1,2,3,4,5};

int fooSearch(int array1[],int N,int i, int X)
{
    if(i==N)
      return 0;
    else if (array1[i]==X)
      return 1;
    else 
      return fooSearch(array1,N,i++,X); 
}

// N denotes total size 5
// i counter that moves from 0 to 4 and eliminate recursion when it reaches 5
// X is the element to be found


int main() {
    fooSearch(arr,5,0,3);
    return 0;
}

我得到的错误是Segmentation Fault (SIGSEGV)

请指导我使用此代码的错误之处。

4 个答案:

答案 0 :(得分:2)

i++是一个固定后增量,它在计算包含该表达式的表达式后i 之后递增。因此,对fooSearch的每次调用实际上都会变为fooSearch(array1, N, 0, X)。递归是无止境的,因此存在段错误(或编译器上的堆栈溢出)。 (您可以通过将i放在函数顶部来确认printf("%d\n", i)不变。)

通过使用前缀增量来解决此问题,该增量使变量在评估之前

return fooSearch(array1, N, ++i, X); 

或者使用i+1,因为无论如何您都不会重用局部变量。

return fooSearch(array1, N, i+1, X); 

答案 1 :(得分:1)

在调用fooSearch()而不是i+1的情况下,递归调用i++时,因为后增量i++不会改变参数i。对于例如

fooSearch(array1,N,i+1,X); 

答案 2 :(得分:1)

查找数组中是否存在元素。

您可以初始化数组元素的数量,比如说10个元素:

int num[10]= {2,3,5,6,1,8,4,9,0,7};

然后,创建 for 循环以检查数字9是否不在数组中,然后继续操作直到条件为false,然后打印元素位置。

  for(i=0; i<10; i++){

    if(num[i] != 9){
      continue;
    }

    printf("9 is found here\n%d",i);
    break;
  }

最后,您编写一个if条件来检查循环是否结束并且找不到打印内容。

  if(i==10){
    printf("Not Found");
  }

完整代码在这里:

#include <stdio.h>


int num[10]={2,3,5,6,1,8,4,9,0,7};
int i;

int main(void){

  for(i=0; i<10; i++){

    if(num[i] != 9){
      continue;
    }

    printf("9 is found here\n%d",i);
    break;
  }

  if(i==10){
    printf("Not Found");
  }

  getchar();
  return 0;
}

答案 3 :(得分:-1)

// Program to find whether an element exist in an array or not.
// Number of elements of array is N, the number to search is X
#include <stdio.h>
int arr[]= {1,2,3,4,5};

int fooSearch(int array1[],int N,int i, int X)
{   if(i==N)
      return 0;
    else if (array1[i]==X)
      return 1;
    else 
      i=i+1;
      return fooSearch(array1,N,i,X); 
}

int main() {
int x = fooSearch(arr,5,0,9);
printf("%d",x);
return 0;
}