给出以下代码:
Function Fun(int n) {
int j, k, t=1;
for (j=0; j<=4*n^2; j+=4) {
for (k=j; k<=4*sqrt(n); k+=4) {
t+=8;
}
}
}
我想计算执行命令t+=8;
的次数。
通过尝试n
的多个值,我发现它已被执行:
次。但是,我怎么能正式解释呢?
答案 0 :(得分:1)
这部分:
for (j=0; j<=4*n^2; j+=4){
for (k=j; k<=4*sqrt(n); k+=4){
t+=8;
}
}
足以回答你的问题。
请注意,它类似于:
for (j=0; j<=n^2; j++){
for (k=4*j; k<=4*sqrt(n); k+=4){
t+=8;
}
}
类似于:
for (j=0; j<=n^2; j++){
for (k=j; k<=sqrt(n); k++){
t+=8;
}
}
1)第一个for
显示第二个执行的次数
2)第二个for
显示执行t+=8;
的次数
让我们解释你的公式的两个部分:
for
有关:
k取Math.floor(Math.sqrt(n)) - j + 1
步j
的值{j=0
=&gt; Math.floor(Math.sqrt(n)) + 1
值for
有关。但是为什么你有sqrt(n)
而不是n^2
?这是棘手的部分。如果您分析第二个循环何时生效,您会发现大于j
的任何sqrt(n)
都是无用的(第二个“内容”未执行,因为{{1}的上限是k
)。这就是为什么在公式中你有sqrt(n)
。之所以发生这种情况,是因为您的代码实际上类似于:
sqrt(n)