如何移除代码中的循环不变量?附待优化代码示例
移除循环不变量的优化方案
首先明确:循环不变量是指在循环执行过程中,值不会随循环变量(这里是i)变化的计算表达式,把这类计算移到循环外,能避免重复计算、提升代码执行效率。
先拆解你提供的代码里的循环不变量:
x和a都是循环外定义的固定值,因此x * a的结果在整个循环过程中完全不变- 基于
x * a的结果,c * 10的结果也不会改变,因为c就是x*a的固定值
优化思路是把这些不变的计算提前到循环开始前完成,循环内部只处理和i相关的变量:
优化后的代码:
x = 10 a = 20 // 将循环不变的计算移到循环外部 c = x * a y = c * 10 for(i = 0; i < 10; i++){ b = a * i; d = b + c; }
优化说明:
- 原循环内的
c = x * a和y = c * 10每次循环都重复计算相同值,现在仅需计算一次 - 循环内仅保留依赖
i的b = a * i,以及需要结合b和不变量c的d = b + c - 若后续代码需要用到
y,直接使用循环外提前计算好的固定值即可,无需在循环内重复赋值
内容的提问来源于stack exchange,提问作者uma shanker
相关产品推荐
相关产品推荐

