传统的使用递归实现的指数函数是非常低效的,这种算法所用的乘法次数为logN,其中N为指数。
#include<stdio.h>
int iseven(int a)
{
if(a % 2 == 0)
return 1;
else
return 0;
}
long int newpow(long int x, unsigned int N)
{
if(N == 0)
return 1;
if(iseven(N))
return newpow(x*x, N/2);
else
return newpow(x*x, (N-1)/2)*x;
}
main()
{
printf("%ld",newpow(2, 30));
return 0;
}