gpt4 book ai didi

c - 递归函数返回难以理解的答案

转载 作者:太空宇宙 更新时间:2023-11-04 01:08:10 24 4
gpt4 key购买 nike

我正在为我的计算 I 类(class)编写一个小程序,其中该程序接受用户决定的一些整数并计算点积。我能够使用迭代方法成功地完成它,但现在我们还必须使用递归来完成它。我计算点积的函数返回范围广泛的不正确数字。有时它只会返回数组中最后两个值的乘积的两倍的值,而其他 4 个集合没有被添加进去。其他时候,我会有 2 个数组,每个数组包含 3 个小数字,而返回值在 80 千。这是递归函数:

//A and B are the arrays that will be dotted together, and n is number of
//elements in each array
int dotP( int *A, int *B, int n ) {
if( n==1 ) return A[0] * B[0] ;
return A[n-1] * B[n-1] + dotP( &A[n-1], &B[n-1], n-1);
}

最佳答案

具体情况是

A[n-1]*B[n-1] + A[n-1 + n-2]*B[n-1 + n-2]+....

发生这种情况是因为对于第二次递归调用,您传递了第 n-1 个元素的地址。当它在第 2 次调用计算 A[n-2] 时,它有效地指向从第 n-1 个开始的第 n-2 个元素元素,距离数组的第一个元素 2*n-3rd。

数组中 n 之后的值是垃圾(假设您分配了 n 个元素,或者您可能分配了超过 n 但没有初始化它们)。因此,您得到的是随机答案。您不需要将当前数组元素的地址传递给每个递归调用。您只需传递第一个元素的地址,即 A&A[0]。然后你的代码工作正常。方法如下:

int dotP( int *A, int *B, int n ) {
if( n==1 ) return A[0] * B[0] ;
return A[n-1] * B[n-1] + dotP( A, B, n-1) ;
}

由于 AB 已经是指针,您只需直接传递它们即可。希望这对您有所帮助。

关于c - 递归函数返回难以理解的答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18972099/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com