为什么我会出现分段错误?我做错了什么



问题:一个使用递归计算数组中数字重复次数的程序。

我所做的:我已经尝试了我所知道的一切方法,我使用了一个输出数组来存储数字的索引,在找到与当前数字匹配的数字时只对另一个数字进行++。似乎什么都不起作用,这是一个或另一个错误(我是个傻瓜(。我试着在网上寻找解决方案,在3-4个网站上找到了解决方案,但不知道发生了什么。

这是代码:

#include <iostream>
using namespace std;
int ind(int a[], int size, int x){
int j;
if(size == 0){
return 0;}
else if (a[0]==x){
j++;
return j;
}
reind(a++,size—,x);
}
int main(){
int a[5] = {1,2,3,3,5};
ind(a, 5, 3);
}

编辑:;reind";是一个拼写错误,我仍然有";ind";。抱歉。

这段代码中有很多错误:

  • j未初始化,即使没有初始化,也说明您没有正确使用j的值
  • 在对ind()的递归调用中缺少return(re应该是这样的吗?(
  • 您正在将asize原始值传递给递归ind(),从而导致无休止的循环。您使用的是后增量和后减量运算符,它们返回原始值,而不是新值。您将需要使用预增量和预减量运算符。在这种情况下,这有点过头了,因为在调整变量后,你就不再使用它们了。因此,可以使用简单的加法和减法运算符
  • main()忽略了ind()的返回值

试试这个:

#include <iostream>
using namespace std;
int ind(int a[], int size, int x){
int j = 0;
if (size == 0){
return 0;
}
if (a[0] == x){
++j;
}
return j + ind(a+1, size-1, x);
}
int main(){
int a[5] = {1, 2, 3, 3, 5};
cout << ind(a, 5, 3);
}

实时演示

也就是说,j和第二个if可以完全消除:

int ind(int a[], int size, int x){
if (size == 0){
return 0;
}
return (a[0] == x ? 1 : 0) + ind(a+1, size-1, x);
}

或者:

int ind(int a[], int size, int x){
if (size == 0){
return 0;
}
return int(a[0] == x) + ind(a+1, size-1, x);
}

相关内容

  • 没有找到相关文章

最新更新