你要计算a^n对吧,这程序的确是相当于把n分成奇偶来对待的。
首先:n=0,a^0=1,返回1;
如果n不等于0,当n为偶数,即n=2k时,则a^n=a^k*a^k,也就是semi = Power(base,expo/2)相当于求a^k,然后再返回semi * semi。当n为奇数时,即n=2*k+1,则a^n=a^k*a^k*a,所以返base*semi*semi
这样便把n的所有情况进行了遍历,也就通过递归求出了a^n。
首先 这个函数根据expo的情况进行了分类
偶数不用说了吧
如果expo是奇数的话,则expo%2==1 就会执行 return base*semi*semi
而semi= Power(base,expo/2)先一步得到的
通过expo/2就达到了降次的目的以调用自身这个函数的目的
嗯 还是举个例子吧 比如说base=2,expo=3
3是奇数所以返回值是 2*semi*semi
而semi= Power(base,expo/2) 也就是semi=Power(2,1)
而1又是奇数所以semi=2*semi’‘’*semi‘’‘
而semi’’‘=Power(base,expo/2)=Power(2,0)=1
所以semi=2*1*1
最后结果就是 2*2*2 即为8
Power(base, expo/2)就是递归调用他自己啊,原来是Power(base, expo)是求base的expo次方,Power(base,expo/2)的结果就是base的expo/2次方,程序中记录这个结果是semi,semi的平方就是base的expo次方了啊。其中还要分expo是否能被二整除两种情况,如果能整除semi就是base的expo/2次方,不能整除就是base的expo/2取下整次方,那么semi的平方就要再乘一次base才是base的expo次方。
Power函数里再调power才递归
1