标签:
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 的相乘减少了时间复杂度
标签:
原文地址:http://www.cnblogs.com/Ponytai1/p/5872492.html