让我们做一些数学运算。根据您给出的示例,完整形式的原始表达式是:
f(a, n) = Σa[i]a[j] (i < n, j < n, j ≠ i)
= Σa[i] (i < n) Σa[j] (j < n, j ≠ i)
当我们用 n+1 替换 n 时,我们得到:
f(a, n+1) = Σa[i] (i < n+1) Σa[j] (j < n + 1, j ≠ i)
= Σa[i] (i < n) Σa[j] (j < n + 1, j ≠ i) + a[n] Σa[j] (j < n + 1, j ≠ n)
= Σa[i] (i < n) Σa[j] (j < n + 1, j ≠ i) + a[n] Σa[j] (j < n)
= Σa[j] (j < n + 1) Σa[i] (i < n, j ≠ i) + a[n] Σa[j] (j < n)
= Σa[j] (j < n) Σa[i] (i < n, j ≠ i) + a[n] Σa[j] (j < n) + a[n] Σa[j] (j < n )
= f(a, n) + 2a[n] Σa[i] (i < n)
换句话说,n 个数字的计算值等于 n-1 个数字的计算值加上 2 * 第 n 个数字乘以所有先前数字的总和。
应该很容易看出如何在不使用数组的情况下做到这一点。您只需要跟踪数字的运行总和以及计算的运行值。
我会让你编写实际的代码,因为这显然是一个家庭作业问题,但这应该是让你开始的大量信息。