尝试使用递归搜索数组元素时遇到了一些困难。预期的输出应该是这样的:
d
我的代码的递归部分:
Enter array size: 10
Enter 10 numbers: 1 2 3 4 5 5 6 7 8 9
Enter the target number: 5
rCountArray() = 2
现在的问题是无论数组中有多少重复元素,它总是给我值1.
我在想是因为每次递归发生时,如果数组元素与target相同,我将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);
}
变量的值设置为0并递增1,这就是值不加起来的原因而只是让我回到1?
有什么想法吗?提前谢谢。
被修改
found
答案 0 :(得分:0)
最后一行应该是
return rCountArray(array, n + 1, a);
上面的内容是未定义的行为,因为你在没有返回的情况下从非空函数的末尾掉了下来。
此外,在array[n] == a
的情况下,您应该返回1 + rCountArray(array, n + 1, a);
。仅仅因为你找到了一场比赛,并不意味着你应该停止搜索,你想找到所有的比赛!
最后,需要有一些停止条件。例如,您也可以传递数组的大小,并在到达那里时停止。或者,n
可以从数组的大小开始,你可以递减它而不是递增它。
你究竟是怎么称呼这个功能的?
另外作为最后一点建议,如果是我,我不会使用递归,我只会使用for循环,因为它更简单,更快。
答案 1 :(得分:0)
原始代码存在一些问题:
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));
}