这个函数为什么会导致段错误?
问题描述:
我写了下面这个简单的函数来执行模幂运算。但是,当指数参数大于约261,000时,它会发生段错误。为什么是这样?我该如何解决它?这个函数为什么会导致段错误?
我正在使用64位Ubuntu上的gcc进行编译。
感谢
unsigned int modex(unsigned int base, unsigned int exponent, unsigned int modulus)
{
if(exponent == 1)
return base;
base = base % modulus;
if(exponent == 0 || base == 1)
return 1;
return (modex(base, exponent - 1, modulus) * base) % modulus;
}
答
你的递归变得如此之深,它占据了整个袋子。考虑使用while循环代替。
答
您正在创建一个巨大的递归链。你应该尝试通过迭代来节省内存和处理。
unsigned modex(unsigned base, unsigned exponent, unsigned modulus){
unsigned
result = 1;
while(expoent--){
result *= base;
result %= modulus;
}
return result;
}
不过,你可以做得更快。
你有一个stackoverflow – ouah 2013-03-06 18:51:07