普通算法(高效幂运算)

 1 #include <stdio.h>
 2 long int pow1(long int a,unsigned int n)
 3 {
 4     if(n == 0)               
 5     {
 6         return 1;
 7      } else
 8     if(n == 1)                //可省略 与第17行重复,第17行可处理n==1的情况
 9     {
10         return a;
11     }
12     
13     if(n % 2 == 0)                //如果n是偶数
14     {
15         return pow1 (a * a,n / 2);          //例 a^4 = a^2 * a^2
16     }else                             //如果n是奇数
17     return pow1 (a * a,n / 2) * a;           //例 a^5 = a^2 * a^2 * a
18 }
19 int main ()
20 {
21     int a = 2;
22     unsigned int n = 0;
23     long int ret = pow1 (a , n);
24     printf("%ld",ret);
25     return 0 ;
26 }

此算法相比直接进行n -1 次 a 的相乘减少了时间复杂度

原文地址:https://www.cnblogs.com/Ponytai1/p/5872492.html