生无涯

吾生也有涯,而知也无涯,以无涯随有涯,乐以忘忧,生亦无涯矣www.cnblogs.com/shengwuya
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

a program a day 16

Posted on 2010-10-12 21:00  生无涯  阅读(162)  评论(0编辑  收藏  举报

/**
*求幂--递归法和非递归法
**/
#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;
}