iteration - 计算能力的迭代解决方案
问题描述
我正在开发一种有效的迭代代码来计算 m n。经过一番思考和谷歌搜索,我找到了这段代码;
public static int power(int n, int m)
// Efficiently calculates m to the power of n iteratively
{
int pow=m, acc=1, count=n;
while(count!=0)
{
if(count%2==1)
acc=acc*pow;
pow=pow*pow;
count=count/2;
}
return acc;
}
这个逻辑对我来说是有意义的,除了为什么我们pow
每次都在接近结束时对值进行平方。我熟悉类似的递归方法,但这种平方对我来说并不是很直观。我可以帮帮她吗?一个带有解释的例子将非常有帮助。
解决方案
每次迭代都会对累加器进行平方,因为count
(这是逆累积功率)每次迭代都会减半。
如果计数为奇数,则累加器乘以该数字。该算法依赖于整数运算,它丢弃除法的小数部分,当计数为奇数时有效地进一步递减 1。
推荐阅读
- ios - Xcode 12 模拟器崩溃
- javascript - 从功能性反应组件中的 JSON 响应中获取一个特定值并将其设置为选择选项
- android - 使用本地 http url 时,Google Cast Android 运行不流畅
- python - 使用新列修改数据框
- angular - 如何为每个组件实例生成一个角度持久的唯一标识符?
- asp.net-core - Yarn 导致 MSB3552 资源文件“**/*.resx”找不到
- r - 使用 ggparty 仅在终端节点中绘制重要的预测线
- javascript - iOS 上的 PWA 不允许我从我的应用中下载图像
- sql - 使用 sum 时,聚合可能不会出现在 UPDATE 语句的集合列表中
- mysql - MySQL 选择 JSON 数组列是另一个数组子集的行