嵌套for循环迭代到2的幂

时间:2014-10-12 03:10:50

标签: c++ loops for-loop

我需要使用两个循环,使外循环驱动内循环来进行2,4,8,16和32次迭代的计算。

例如,如果i = 2(对于外环) 然后内循环将迭代4次

如果i = 3 然后内循环将迭代8次,依此类推。

这是我使用的逻辑

for ( i = 0 ; i < n ; i++ ) 
     {
         for ( c = 0 ; c <= pow(2,i) ; c=c++ )   

我真的很感激任何建议

3 个答案:

答案 0 :(得分:1)

  1. 计算一次内循环的迭代次数,然后重复使用它,而不是每次都计算它。

  2. 不要使用pow(2, i)。使用更可靠的1 << i

  3. 不要使用c = c++。只需使用c++即可。我不确定c = c++是否为c = c+1

  4. for ( i = 0 ; i < n ; i++ ) 
    {
       int nextCount = (1 << i);
       for ( c = 0 ; c <= nextCount ; c++ ) 
    

答案 1 :(得分:0)

你可以使用这样的事实来计算C ++中的2的小功率,你可以使用左移位:

for ( i = 0 ; i < n ; i++ ) {
    for ( c = 0 ; c < (1 << i) ; c++ ) {
        ...
    }
}

这种“魔法”背后的原因与在十进制数右边添加零的数字相乘的原因相同。

请注意,由于您将内循环的迭代开始为零,因此您需要使用<,而不是<=。否则你将迭代2 n +1次。

答案 2 :(得分:0)

您希望使用其他人建议的内容:

for (int i=0 ; i<n ; i++){
    for(int c=0 ; c < (1<<i) ; c++){
        //do computations
    }
}

您希望使用<代替<=的原因是<=实际上会给您(2 ^ i)+1次迭代,因为计数为零。

你想要使用bitshift操作1<<i的原因是因为整数已经在基数2中,并且在末尾添加零是重复乘以2的等价。 (1自动创建为一个整数,而1.0自动创建为浮点数。你无法安全地使用浮点数执行此操作:1.0&lt;&lt;&lt;&lt; 1 bitshifts to 1.70141e + 38,如果您可以让编译器执行此操作。 )

最后,你想使用c++因为c ++递增c,但是返回原始值,所以你的内部for循环总是保持原始值而不会递增。