【发布时间】:2020-09-24 05:13:02
【问题描述】:
我刚刚了解了分治算法,对此我有点困惑。问题是我的作业,我尝试了很多方法来修复我的代码,但它没有运行。
#include <iostream>
using namespace std;
void inputArray(int* a, int& n)
{
cout << "Input n:";
cin >> n;
for (int i = 0; i < n; i++)
{
cout << "input a[" << i << "]= ";
cin >> a[i];
}
}
int sumeven(int* a, int l, int r)
{
if (l == r && a[l] % 2 == 0)
{
return a[l];
}
int mid = (l + r) / 2;
int s1 = sumeven(a, l, mid);
int s2 = sumeven(a, mid + 1, r);
return s1 + s2;
}
int main()
{
int n;
int a[20];
inputArray(a, n);
cout<<sumeven(a, 0,n-1);
return 0;
}
【问题讨论】:
-
inputArray对其n参数所做的任何更改对调用者都是不可见的。在main中,n仍未初始化。 -
看起来
sumeven(a, mid + 1, r);可以被mid+1 > r调用。 -
@IgorTandetnik 从您的角度来说,这是一个很好的观点。我建议@NguyenTuan08 阅读更多关于调用函数传递参数
by value和by reference之间的区别。