在指数平方中递归的工作
Working of recursion in Exponential squaring?
我在codechef教程中阅读了快速乘法的指数平方法,我对该方法有一些疑问
long long int fast_exp(int base, int exp)
{
if(exp==1)
return base;
else
{
if(exp%2 == 0)
{
long long int base1 = pow(fast_exp(base, exp/2),2);
if(base1 >= 1000000007)
return base1%1000000007;
else
return base1;
}
else
{
long long int ans = (base* pow(fast_exp(base,(exp-1)/2),2));
if(ans >= 1000000007)
return ans%1000000007;
else
return ans;
}
}
}
我的疑问是这个方法是否在每个递归步骤执行"%"操作,或者在计算实际的基本^exp之后的最后一步执行。我个人认为它在最后一步以及在我针对运行此代码时计算%
base=345 and exp=246;
它给了我垃圾值。
我想知道当"%"操作发生时,在每一步或最后一步。
您的问题有点令人困惑,所以我实际上不知道您想问什么,但我确实看到您的代码有三个主要问题:
pow
是浮点幂运算,这意味着当数字足够大时会出现舍入错误。当你试图做精确的整数运算时,你不能使用它- 您似乎试图对特定的30位模数进行算术模运算,这意味着乘以三个减少的量(例如,将一个数字平方,然后乘以另一个数字)将得到大小高达90位的结果,从而溢出
long long
,因为它可能只是64位类型 - 您使用的是带符号的类型,但您的所有代码似乎都假设您的所有数字都是非负的
相关文章:
- 即使没有调用这个递归函数,它是如何工作的?
- 递归函数调用在后台工作
- 这个递归函数是如何工作的?
- 使用 std::map 的递归堆栈分配如何工作?
- 为什么递归向后工作?
- 使用递归的函数未按预期工作
- 在 C++ 中使用递归填充 D2 数组,有时工作正常,其他时会引发异常
- 以下递归程序的最后一行是如何工作的
- 我对变量在递归函数中如何工作的理解是否正确?
- 不明白为什么这个简单的递归开始工作然后崩溃
- Word.exe 已停止使用递归工作
- 递归在此代码中的工作原理
- nqueens问题的C 递归解决方案无法正常工作
- C++中的递归选择不能完全正常工作
- 为什么后缀失败并且前缀在传递迭代器作为参数并在尾部位置递归时工作正常
- 无限递归模板实例化使用clang时GCC工作正常
- 我似乎无法让我的最大长度递归函数工作
- 简单的C++递归无法正常工作 - 我只是不明白为什么
- 在指数平方中递归的工作
- g++空函数删除是否递归工作