/**
*求幂--递归法和非递归法
**/
#include<stdio.h>
#include<math.h>
//n>=0,非递归算法乘法次数为O(n)
//返回主可能很大,故用unsigned long
unsigned long myPower(int m,int n)
{
int p = 1;
while(--n >= 0)
p = p * m;
return p;
}
//n >= 0,递归算法乘法次数为O(log(n))
unsigned long myPow(int m,int n)
{
if(0 == n)
return 1;
if(1 == n)
return m;
if(0 == n % 2)
{
//用tmp暂存myPow(m,n/2),以免重复计算,次句提高了算法的效率
unsigned long tmp = myPow(m,n/2);
return tmp * tmp;
}
if(0 != n % 2)
return m * myPow(m,n-1);
}
int main()
{
int m,n;
printf("input m ,n :\n");
scanf("%d,%d",&m,&n);
printf("the result of power(%d,%d) is :%d\n",m,n,myPow(m,n));
//printf("the result of power(%d,%d) is :%d\n",m,n,power(m,n));
return 0;
}