在数据结构与算法的书上看到了这样递归二分求幂的方法,自己写了一下:
#include "stdafx.h"
long int EffectPow(long int X, unsigned int N)
{
if (N == 0)
return 1;
if (N % 2 == 0)
return EffectPow(X*X,N/2);
else
return X*EffectPow(X*X,(N-1)/2);
}
int _tmain(int argc, _TCHAR* argv[])
{
int res = 0;
res = EffectPow(2,3);
//res = EffectPow2(5,6);
return 0;
}
现在和书上标准的程序对比一下,可见不足:
long int EffectPow2(long int X, unsigned int N)
{
if (N == 0 || X == 1)
return 1;
if (N == 1)
return X;
if (N % 2 == 0)
return EffectPow(X*X,N/2);
else
return EffectPow(X*X,(N-1)/2)*X;
}