这里有循环:
for (i = n; i < 2*n; i += 4) {
for (j = 0; j < 3*i; j += 2) {
function();
}
}
如何在不运行此代码的情况下计算function()的调用量(以n为单位)?
我想我可以使用算术级数,其总和是S =(a1 + ak)* k / 2,其中a1 - 是内循环的迭代量,而我有初始值和ak - 是当我有最终价值时内循环的迭代量。
但我无法将其表达为一个以n为变量的公式。
你对此有什么想法吗?
答案 0 :(得分:4)
内循环执行3 * i / 2次调用。外环具有i = n,n + 4,n + 8 ... 2n-4。因此我们有:
count = 3*n/2 + 3*(n+4)/2 + 3*(n+8)/2 + ... 3*2*n/2 =
= 3/2 * (n + (n+4) + (n+8) + .. + (2n-4)) =
= 3/2 * (3n^2-4n) / 8 =
= (9n^2 - 12n) / 16
(编辑:可能仍有一些小的不准确需要修复)
编辑#2 - 我按照自我的更正,现在我得到了预期的结果。
答案 1 :(得分:1)
嗯,你已经得到了算术级数的公式。当i = n时,内部循环变为3n / 2次(或多或少 - 您可能必须转换为整数)。您可能需要稍微调整一下上端,因为无法保证n可被4整除,但您可以对最终循环执行相同操作。并且它将运行n / 4次(再次转换为整数)。
答案 2 :(得分:0)
以下是允许您推断function()
执行次数的正式步骤:
外部循环将执行n + ceil(n / 4) - 1次,内部循环取决于外部循环。我试图尽可能详细地说明这个解决方案的清晰度。