C 将数组传递给函数并通过递归将其添加
em试图做的是将数组传递给一个函数,该函数将添加所有数组元素并返回输出。请帮帮我。我不知道我在这方面做错了什么:/C 将数组传递给函数并通过递归将其添加,c,arrays,recursion,C,Arrays,Recursion,em试图做的是将数组传递给一个函数,该函数将添加所有数组元素并返回输出。请帮帮我。我不知道我在这方面做错了什么:/ #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(i
#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;
}
#包括
#定义最大值5
内部数组(内部*dArr,内部lim);
int main()
{
int数组[MAX]={9,7,4,2,10};
printf(“%d”,数组sum(数组,最大值));
返回0;
}
内部数组sum(内部*dArr,内部lim)
{
INTANS;
如果(lim>0)
Ans=dArr[lim]+arraySum(*dArr,lim--);
返回Ans;
}
您在dArr[lim]
上遇到未定义的行为,因为lim
是5
,数组中有元素0…4
当lim==0
时,也会得到未定义的行为,因为返回未初始化的Ans
。声明时,将其初始化为dArr[0]
修复此问题后,您将希望在递归中进一步传递
dArr
本身,因为dArr
只返回int
,您在dArr[lim]
上遇到未定义的行为,因为lim
是5
,并且数组中有元素0…4
当lim==0
时,也会得到未定义的行为,因为返回未初始化的Ans
。声明时,将其初始化为dArr[0]
修复此问题后,您需要在递归中进一步传递
dArr
本身,因为dArr
只返回int
将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;
}
将
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;
}
您的代码有几个问题:
数组[MAX]
,这是未定义的行为lim
为零时,函数返回未初始化的Ans
arraySum
的第一个参数是错误的lim--
的使用是错误的因为这看起来像是家庭作业,我会让你找出如何解决这些问题。如果这不是作业,你可能想考虑递归是否是该项工作的正确工具。 你的代码有几个问题:
数组[MAX]
,这是未定义的行为lim
为零时,函数返回未初始化的Ans
arraySum
的第一个参数是错误的lim--
的使用是错误的因为这看起来像是家庭作业,我会让你找出如何解决这些问题。如果这不是作业,你可能想考虑递归是否是该项工作的正确工具。 < P>记住,计算机把<强> 0 < /强>作为第一个数字,所以你的数组将从元素[0 ]到元素[4 ]。您的代码从5开始并向下计数到1,这意味着在本例中元素[5]将返回垃圾,因为索引不存在。将Lim-1传递到函数中或手动更改函数中的值
ArraySum(Array, MAX - 1);
或
编辑:您还需要将ans初始化为某个值,因此如果传递了一个零元素数组,则函数不会返回未初始化的变量。请记住,计算机将0视为第一个数字,因此数组将从元素[0]到元素[4]进行编号。您的代码从5开始并向下计数到1,这意味着在本例中元素[5]将返回垃圾,因为索引不存在。将Lim-1传递到函数中或手动更改函数中的值
ArraySum(Array, MAX - 1);
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;
}
或
编辑:您还需要将ans初始化为某个值,因此如果传递了一个零元素数组,函数将不会返回未初始化的变量
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;
}
dArr
是指向整数的指针。解引用它会得到一个整数。不管怎样,为了实际的目的,使用<代码> STD::累积< /COD>。C和C++不是可互换的技术。在现实世界中,没有理由使用递归。<代码> DARR < /Cord>是一个指向整数的指针。解引用它会得到一个整数。不管怎样,为了实际的目的,使用<代码> STD::累积。C和C++不是可互换的技术。在实际应用中。我认为不初始化Ans的值是可以的,因为该值被分配给Ans而不是求和。我认为不初始化Ans的值是可以的,因为该值被分配给Ans而不是求和#包括int arraySum(int*dArr,int lim);int main(){int array[5]={9,7,4,2,10};printf(“%d”,arraySum(array,4));返回0;}int Ans=0;int