原理:通过二分、递归的方法来减少乘法的次数,提高程序计算效率;
由于采用折半递归,时间复杂度为log(N);
比如:power(2, 7)
传统方法:
2 * 2 * 2 * 2 * 2 * 2 * 2
改进算法:
由于采用折半递归,时间复杂度为log(N);
比如:power(2, 7)
传统方法:
2 * 2 * 2 * 2 * 2 * 2 * 2
改进算法:
(2 * 2 * 2 )*( 2 * 2 * 2) * 2
#include <iostream>
using namespace std;
static int cnt = 0;
int Power(int x, int p)
{
if (1 == p)
return x;
int result = 0;
result = Power(x, p >> 1); //p值减半
result *= result;
++cnt; //统计相乘次数
if (p & 1) //p值是否为奇数
{
result *= x;
++cnt;
}
return result;
}
int main()
{
const int MAX = 30;
for (int i = 1; i != MAX; ++i)
{
cnt = 0;
cout<<Power(2, i)<<endl;
cout<<"count:"<<cnt<<endl;
}
return 0;
}
1698

被折叠的 条评论
为什么被折叠?



