我需要使用两个循环,使外循环驱动内循环来进行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++ )
我真的很感激任何建议
答案 0 :(得分:1)
计算一次内循环的迭代次数,然后重复使用它,而不是每次都计算它。
不要使用pow(2, i)
。使用更可靠的1 << i
。
不要使用c = c++
。只需使用c++
即可。我不确定c = c++
是否为c = c+1
。
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循环总是保持原始值而不会递增。