本总结是是个人为防止遗忘而作,不得转载和商用。
题目
给定实数x和整数n,求xn。
分析
遇到这个题目你还会傻傻的一个个乘下去么?
为什么不这样做:
假设求2的6次幂,那就:直接求出y =2(6/2=3),然后令y*y,即:
1,求出2的1次幂 = 2
2,求出2的2次幂 = 4
3,求出2的3次幂 = 8
4,直接计算出2的6次幂 = 8*8 = 64。
这样一来就节省了一半时间。
那进一步呢?
假设求2的12次幂,你怎么求?
先‘老老实实’的求出y =26,然后y*y?
拜托,26怎么求的你忘了?
所以记得用递归。
总结
如何求xn:
如果n是偶数,则计算x(n/2)*x(n/2);
如果n是奇数,则计算x(n/2)*x(n/2)*x;
然后不停的递归。
PS:如果计算x-100,则先计算x100,然后做个除法:1/x100。
时间复杂度:O(NlogN)