[英]Recursion to find the amount of same elements in an array
尝试使用递归对数组元素执行搜索时遇到一些困难。 预期的输出应如下所示:
Enter array size: 10
Enter 10 numbers: 1 2 3 4 5 5 6 7 8 9
Enter the target number: 5
rCountArray() = 2
而我的代码的递归部分:
int rCountArray(int array[], int n, int a)
{
int found = 0;
if (n < 1) {
return -1;
}
if(array[n] == a){
++found;
return found;
}
rCountArray(array, n + 1, a);
}
现在的问题是,无论数组中有多少个重复的元素,它总是给我值1。
我在想是因为每次递归都发生时,如果数组元素与目标相同,我会将found
变量的值设置为0并以1递增,这就是为什么该值不累加,而是用1返回给我只要?
有任何想法吗? 提前致谢。
编辑
int main()
{
int array[SIZE];
int index, count, target, size;
printf("Enter array size: ");
scanf("%d", &size);
printf("Enter %d numbers: ", size);
for (index = 0; index < size; index++)
scanf("%d", &array[index]);
printf("Enter the target: ");
scanf("%d", &target);
count = rCountArray(array, size, target);
printf("rCountArray() = %d", count);
return 0;
}
最后一行应该是
return rCountArray(array, n + 1, a);
上面的内容是未定义的行为,因为您将退出非void函数的结尾而没有返回。
另外,在array[n] == a
的情况下,您应该返回1 + rCountArray(array, n + 1, a);
。 仅仅因为找到一个匹配,并不意味着您应该停止搜索,而是想要找到所有匹配!
最后,需要有一些停止条件。 例如,您也可以传递数组的大小,并在到达数组时停止。 或者, n
可以从数组的大小开始,您可以递减而不是递增。
您究竟如何调用此函数?
作为最后的建议,如果是我,我不会为此使用递归,而是使用for循环,因为它更简单,更快捷。
您的原始代码有几个问题:
if
应该测试< 0
因为您希望它在数组索引变为0时执行下一个测试。 return -1
! 当函数失败时,它必须返回0 。 found
增加后不返回。 rCountArray()
, n + 1
应该为n - 1
以减少数组的索引。 found + rCountArray()
。
int rCountArray(int array[], int n, int a)
{
int found = 0;
if (n < 0)
return 0;
if (array[n] == a)
++found;
return (found + rCountArray(array, n - 1, a));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.