我们尝试做的是将数组传递给一个函数,该函数将添加所有数组元素并返回输出。请帮我。我不知道我在做错了什么:/
#include <stdio.h>
#define MAX 5
int arraySum(int *dArr,int lim);
int main()
{
int array[MAX] = {9,7,4,2,10};
printf("%d", arraySum(array, MAX));
return 0;
}
int arraySum(int *dArr,int lim)
{
int Ans;
if(lim>0)
Ans = dArr[lim] + arraySum(*dArr, lim--);
return Ans;
}
答案 0 :(得分:4)
您的代码存在一些问题:
array[MAX]
,这是未定义的行为。Ans
为零时,您的函数会返回未初始化的lim
。arraySum
的第一个参数是错误的。lim--
是错误的。由于这看起来像家庭作业,我会让你弄清楚如何解决这些问题。如果不是作业,您可能需要考虑递归是否适合作业。
答案 1 :(得分:1)
您在dArr[lim]
上遇到未定义的行为,因为lim
为5
且数组中包含0...4
元素。
在lim==0
时,您还会收到未定义的行为,因为您返回了未初始化的Ans
。声明它时,将其初始化为dArr[0]
。
解决此问题后,您需要在递归中进一步传递dArr
,因为dArr
仅返回int
。
答案 2 :(得分:0)
将MAX
更改为4
并将if(lim>0)
条件更改为if(lim>=0)
这将使您的递归添加为dArr[4]+dArr[3]+dArr[2]+dArr[1]+dArr[0]
,即数组的所有5个元素。
编辑:更正的计划:
int main()
{
int array[MAX] = {9,7,4,2,10};
printf("%d", arraySum(array, MAX-1));
return 0;
}
int Ans = 0;
int arraySum(int *dArr,int lim)
{
if(lim>=0){
Ans = dArr[lim] + arraySum(dArr, lim-1);
}
return Ans;
}
答案 3 :(得分:0)
请记住,计算机将 0 视为第一个数字,因此您的数组将从元素[0]编号到元素[4]。你的代码从5开始并向下计数到1,这意味着在这种情况下元素[5]将返回垃圾,因为索引不存在。将Lim - 1传递给函数或手动更改函数中的值。
ArraySum(Array, MAX - 1);
OR
ArraySum(//....)
{
lim--;
//code here....
}
编辑:您还需要将ans初始化为某个值,因此如果传递零元素数组,则该函数不会返回未初始化的变量。
答案 4 :(得分:0)
int arraySum(int *dArr,int lim)
{
int Ans;
if(lim>=0) // note the change here
Ans = dArr[lim] + arraySum(dArr, --lim); // note the --lim change here
return Ans;
}