【发布时间】:2014-05-31 17:07:13
【问题描述】:
我已经实现了一个非递归模幂运算
typedef long long uii;
uii modularExponentiation(uii base,uii exponent,uii p)
{
int result= 1;
base = base % p;
while( exponent > 0)
{
if (exponent % 2 == 1)
result = (result * base) % p;
exponent = exponent >> 1;
base = (base * base) % p;
}
return result;
}
另一个是递归的
uii modularExponentiation(uii base,uii exponent,uii p)
{
if(exponent == 0)
return 1;
int res= modularExponentiation(base,exponent/2,p);
if(exponent%2 == 0)
return (res * res)%p;
else
return ((res*res)*(base%p))%p;
return res;
}
但是这两个代码没有产生正确的结果。来自维基百科的迭代代码给出了正确的结果。我在递归版本中做错了什么,我应该怎么做才能修复它?
【问题讨论】:
-
在哪种情况下递归解决方案会失败?尝试替换 ((resres)*(base%p))%p;与 ((resres%p)*base)%p;
标签: c++ algorithm recursion exponentiation modular-arithmetic