计算循环运行的次数

时间:2014-04-19 01:20:02

标签: java

如果我们有这样的循环

for(int i=0; i<n; i+=2) 
{
    total+=1;
}

我假设标题中有一条指令,它在正文中执行一条指令,因此指令总数为(n-0)/ 2 * 1 + 1(最后条件)。这是正确的方法吗?你怎么算呢?

另外,这个怎么样?

for(int i=1; i<n; i*=2)
{
    total+=1;
}

如果n = 20,我就像1,2,4,8,16,我不确定如何计算

1 个答案:

答案 0 :(得分:1)

将它们写在纸上并寻找图案。第一个例子:

for(int i=0; i<n; i+=2) 

n  i's      total
0  []       0
1  [0]      1 
2  [0]      1
3  [0,2]    2
4  [0,2]    2
5  [0,2,4]  3
6  [0,2,4]  3
   and so on..

floor((n + 1)/ 2)(或整数除法)。

第二个;我们可以通过检查看到它与log2有关,所以让我们将计数与log2(n)进行比较,看看我们是否能找到一个模式:

for(int i=1; i<n; i*=2)

n   i's        total   log2(n)
1   []            0     ---
2   [1]           1     1
3   [1,2]         2     1.58
4   [1,2]         2     2
5   [1,2,4]       3     2.32
6   [1,2,4]       3     2.58
7   [1,2,4]       3     2.81
8   [1,2,4]       3     3
9   [1,2,4,8]     4     3.17
10  [1,2,4,8]     4     3.32
11  [1,2,4,8]     4     3.46
12  [1,2,4,8]     4     3.58
13  [1,2,4,8]     4     3.70
14  [1,2,4,8]     4     3.81
15  [1,2,4,8]     4     3.91
16  [1,2,4,8]     4     4
17  [1,2,4,8,16]  5     4.09

看着这个并考虑一下,我们可以看到它是 floor(1 + log2(n-1)),特殊情况下n = 0(总数= 0)和n = 1(总数= 0)。

最后一个思想的过程是:我们必须转移&#34;将 log2 列向下一列,使其与 total 列对齐(因此 log2(n-1)),我们必须添加1,以使值匹配。