问题:一个使用递归计算数组中数字重复次数的程序。
我所做的:我已经尝试了我所知道的一切方法,我使用了一个输出数组来存储数字的索引,在找到与当前数字匹配的数字时只对另一个数字进行++。似乎什么都不起作用,这是一个或另一个错误(我是个傻瓜(。我试着在网上寻找解决方案,在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
应该是这样的吗?( - 您正在将
a
和size
的原始值传递给递归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);
}