一个函数执行多少次?

时间:2016-01-27 14:36:08

标签: algorithm loops for-loop

我有这段代码

AUTOEXTEND MAXSIZE UNLIMITED

我将决定执行foo()的次数。我有这个选项

for ( i = 0; i < N ; i+=3 ){
   foo();
   if( i % 5 ==0) foo();
}

决定正确结果的正确方法是什么?外循环在条件N / 3次之外执行foo(),但如何判断条件执行函数的次数是多少次?

3 个答案:

答案 0 :(得分:1)

为了更容易理解,我们可以将这个循环分成2:

for ( i = 0; i < N ; i += 3 ){
   foo();
}

for ( i = 0; i < N ; i += 15 ){
   foo();
}

对于任何自然的 N K 周期(i = 0; i&lt; N; i + = k)将运行 1 +楼((N-1)/ k)次。

这样总的运行次数将是: 1 + floor((N-1)/ 3)表示第一个, 1 + floor((N-1)/ 15)表示第二个周期:

2 + floor((N-1) / 3) + floor((N-1) / 15)

答案 1 :(得分:0)

如果循环是

for ( i = 0; i < N ; i+=3 ){
   foo();
}

然后它将执行大约N / 3次(确切地说是((N + 2/3))。如果循环是

for ( i = 0; i < N ; i+=3 ){
   if( i % 5 ==0) foo();
}

然后它会执行大约N / 15次(确切地说是(N + 14)/ 15),因为

  • 只有当i是3的倍数
  • 时才进入循环
  • 但仅当i是5的倍数时才会执行foo;
  • 如此组合;只有当i是3 的倍数并且是5的倍数时才会执行foo;因此,只有它是15的倍数。

通过一些非常简单的推论;正确答案是两者的总和。

floor((N+2)/3)+floor((N+14)/15)

答案 2 :(得分:0)

查看不同公式如何工作的一种相当简单的方法是在excel中为每个公式编写一个函数,然后为它们提供不同的N值,然后将结果与您手动计算的N的某些值进行比较。 / p>

正如之前已经观察到的那样,第二次调用foo()只会在i%5为0时执行。因为i步长为3,所以这只会每15次执行一次,因为15是最小的数字。可以被3和5整除。这样可以排除一些公式。