我几个小时以来一直在考虑这个问题,但似乎找不到合适的解决方案。
我有这段代码,理论上可以无限长:
y(1) = x(1)*h(1);
y(2) = x(1)*h(2)+x(2)*h(1);
y(3) = x(1)*h(3)+x(2)*h(2)+x(3)*h(1);
y(4) = x(1)*h(4)+x(2)*h(3)+x(3)*h(2)+x(4)*h(1);
y(5) = x(1)*h(5)+x(2)*h(4)+x(3)*h(3)+x(4)*h(2)+x(5)*h(1);
y(6) = x(2)*h(5)+x(3)*h(4)+x(4)*h(3)+x(5)*h(2)+x(6)*h(1);
y(7) = x(3)*h(5)+x(4)*h(4)+x(5)*h(3)+x(6)*h(2);
y(8) = x(4)*h(5)+x(5)*h(4)+x(6)*h(3);
y(9) = x(5)*h(5)+x(6)*h(4);
y(10) = x(6)*h(5);
为了最大限度地减少写入工作并使其普遍适用,我想把它放入(可能是?)两个循环,但我不知道如何。也许两个动态计算变量的for循环?但是我又不知道如何把它拉下来。
答案 0 :(得分:1)
这样做,而尺寸是你的动态尺寸
Double[] yArray = new Double[sizw];
for(int i=0;i < yArray.length-4;i++) {
for(int j=0;j<5;j++) {
yArray[i+j] = x(i+1)*h(j+1);
}
}
答案 1 :(得分:1)
我假设你正在使用C#。
for(int loop=1;loop<=10;loop++) {
y[loop] = get_y[loop];
}
int get_y(int index) {
int ret = 0;
for(int loop=1;loop<=index) {
ret += x[loop]*h[index-loop+1];
}
return ret;
}
答案 2 :(得分:1)
这很有趣!
注意测试它,似乎工作正常。使用x和h我的结果是: y(1)= 6
y(2)= 17
y(3)= 34
y(4)= 58
y(5)= 90
y(6)= 115
y(7)= 116
y(8)= 106
y(9)= 84
y(10)= 49
void DoCalcs () {
for (int i = 1; i <= 10; i++) {
int result = Y (i);
}
}
int Y (int i) {
//calculate start index for x
int xIndex = Math.Max (1, i - 4);
//calculate end index for x
int endXIndex = Math.Min (6, i);
//running sum
int totalresult = 0;
//loop through h until reaches zero, or until we run out terms in the sum
for (int startHIndex = Math.Min (5, i); startHIndex >= 1; startHIndex--) {
totalresult += X (xIndex) * H (startHIndex);
xIndex++;
//if we run out of terms, break out and return result
if (xIndex > endXIndex) {
return totalresult;
}
}
//otherwise return error
return -9999;
}
int X (int i) {
return i + 1;
//this could be whatever
}
int H (int i) {
return i + 2;
//this could be whatever
}
希望有所帮助!
修改: 如果你需要让它继续无穷大,只需删除breakout return语句,并在结尾处返回总数。