查找数组中给定数字的出现次数

Finding number of occurence of a given number in an array

本文关键字:数字 数组 查找      更新时间:2023-10-16

我正在测试一个递归函数,该函数返回数组中给定数字的出现次数。运行代码时出现意外结果。

#include <iostream.h>
int Occurence(int A[], int size, int n)
{
static int occur=0;
if(size == 0)
{
int occur2 = (int) occur;
return occur2;
}
else
{
if ( n == A[size-1])
occur++;
Occurence(A, size-1, n);
}
}
int main()
{
int A[] = {1,3,2,5,1,2, 3, 7,7, 8,8, 4, 6, 9,9, 0};
int size = sizeof(A)/sizeof(A[0]);
int n;
cout<< "Enter Number to Find : ";
cin >>n;
cout<<endl;
cout<<"Number of Occurence of "<< n << " is :"<< Occurence(A, size, n)<<endl;
return 0;   
}

你在函数结束时缺少一个返回。如果size不为 0,则函数的行为未定义。添加返回应该使其正常工作:

int Occurence(int A[], int size, int n)
{
static int occur=0;
if(size == 0)
{
int occur2 = (int) occur;
return occur2;
}
else
{
if ( n == A[size-1])
occur++;
return Occurence(A, size-1, n);
}
}

递归是实现这个问题的一种非常奇怪的方法,所以我假设这是一些玩具示例来演示递归的工作原理。即使是这种情况,你也不应该在实现中使用静态变量。只需让每个调用返回当前总和:

int Occurence(int A[], int size, int n)
{
if(size == 0)
{
return 0;
}
else
{
return (n == A[size-1] ? 1 : 0) + Occurence(A, size-1, n);
}
}

此版本在多次调用时将返回正确的结果,而您的原始版本每次都会添加到以前的计数中。

在实际代码中,只需执行以下操作:

#include <algorithm>
int Occurence(int A[], int size, int n)
{
return std::count(A, A+size, n);
}

代码中存在一些编译问题。首先,在C++中,标准库文件通常文件名中没有扩展名。所以,包括<iostream.h>是错误的。您应该包括<iostream>.

代码的另一个问题是您在使用coutcin而没有指定其命名空间。因此,不要直接使用coutcin,而是使用std::coutstd::cin或在包含后声明use namespace std

编辑:正如托马斯马修斯指出的那样,更喜欢使用std::coutstd::cin而不是using namespace std