【发布时间】:2018-08-15 15:01:24
【问题描述】:
我想在数组的某个范围内查找数字,并且必须采用递归方式。无法修改函数变量。
假设在 2 和 3 的范围内
输入是:int a[] = {4, 1, 3, 1, 3, 2};
输出将是 = {3,3,2} ,找到 3 个
不确定在这种情况下如何编写递归函数。下面的我试过不工作。
int within(int a[], int N, int lower, int upper, int result[])
{
if(N == 1 && N <= upper && N>= lower)
return a[0];
return within(&a[1], N-1, lower, upper, result);
}
int main()
{
int a[] = {4, 1, 3, 1, 3, 2};
int result[6] = {0};
int i, nResult;
nResult = within(a, 6, 2, 3, result);
printf("%d data passed the bounds\n", nResult);
for (i = 0; i < nResult; i++){
printf("%d ", result[i]);
}
printf("\n");
return 0;
}
【问题讨论】:
-
为什么要递归函数?
-
你能定义
N- 它是a的元素数量吗 - 你为什么要检查N的值 - 看起来你应该查询a[i]的值 -
你永远不会给结果数组赋值;在每个递归调用中发送相同的数组元素;
N似乎根本不相关。你可能想回到这本书。 -
只需使用循环。更快、更安全、更易读、更少的堆栈使用,在所有可能的方面都更好。
-
听起来像是家庭作业。
标签: c algorithm function recursion range