递归版本的实现:
long long int Pow1(int x,unsigned int N) { if (N == 0) { return 1; } if (N & 0x01) { return Pow(x * x,N >> 1) * x; } else return Pow(x * x,N >> 1); }
递归 的基准条件是:N==0 此时返回1(不调用自身)。若N是偶数,则x的N次方等于 x*x的N/2次方。若N是奇数,则x的N次方等于 x*x的N/2次方在乘以x。N/2可以用N右移一位来实现。
非递归版本的实现:
long long int Pow(int x,unsigned int N) { long long int n = x; long long int ans = 1; while (N) { if (N & 0x01) { ans *= n; } n *= n; N = N >> 1; } return ans; }
把N用二进制来表示,例如N=9,则二进制为:1001,x的N次方就等于x乘以x的8次方,再比如,1111,则就是x乘以x的平方再乘x的四次方,再乘x的八次方。因此可以用一个变量n(初始为x)来保存x的幂次。然后开始循环,若N最右位为1,则结果乘以n,然后让n平方,N右移。
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-29 04:24:38