x^n=x x x.....x
朴素算法的时间复杂度是O(n)
采用分治(当n为偶数)
x^n=x^(n/2)*x^(n/2)
T(n)=2T(n/2)+O(1)
时间复杂度为O(logn)
我想的是采用函数的递归来实现
#include<stdio.h>
int mypow(int x,int n)
{
int sum;
if(n==1) return x;
if(n&1)//n为奇数
{
sum=mypow(x,n/2)*mypow(x,n/2)*x;
}
else
{
sum=mypow(x,n/2)*mypow(x,n/2);
}
return sum;
}
int main()
{
printf("%d\n",mypow(2,10));
}网上看到个大神这样来写
int my_pow(int x,int n)
{
if(n==0)
{
return 1;
}
int p=1;
while(n>0)
{
if(n&1)
{
p*=x;
}
x*=x;
n/=2;
}
return p;
}原理是一样的,但是没用递归,节省了很多开销~厉害啊
本文介绍了一种快速幂运算的方法,通过分治策略将时间复杂度从O(n)降低到O(logn)。提供了两种实现方式:一种使用递归,另一种采用循环结构避免了递归带来的额外开销。
7508

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



