我是递归数组的初学者,因此需要一些指导。 我正在尝试查找数组中是否存在元素。
// 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)
。
请指导我使用此代码的错误之处。
答案 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;
}