我们最开始运算一个数的n次方有的网友会利用for循环进行累计乘以这个数以此来达到求解代码如下.......
for(int i = 1;i <= n;i++)
{
sum = a * sum;
}
当然这个也是最普通也是最好想象的方法。再然后我们也学会了运用pow的形式......
int a = pow(a,n);
这里给大家引进一种快速幂的递归方法来求解,咱们先看代码....
#include <stdio.h>
int fang(int a,int n)
{
if(n == 1) return a;
int tmp = fang((a,n / 2);
if(n % 2 == 1) return tmp * tmp * a;
else return tmp * tmp;
}
int main()
{
int a,n;
scanf("%d %d",&a,&n);
int k = fang(a,n);
printf("%d",k);
return 0;
}
这个递归过程其实涉及到了分冶的思想,不断的把n进行分解直到最后一层n = 1;然后逐步的往上一层归,如果发现n在递的过程除以得到的是奇数,那么就会在此基础上多成一个a。时间复杂度为O(以二为底n的对数)。
过程解析:
假设n = 11,那么第一次开始11 / 2 = 5,然后5 / 2 = 2,之后2 / 2 = 1;当n = 1时往上归,此时的n = 2,然后return a * a,继续往上归,n = 5,return a2 * a2 * a,继续往上归,当n = 11,return a5 * a5 * a -->最后的结果就是a11。这里推荐大家了解一下什么是分冶,然后再看本文章效果会好点。
好了,今天的分享到此结束,还有很多方法也可以求方,这里因为作者的能力问题无法编出,感谢收看hhh。