为什么这个函数会导致段错误?

Ric*_*ard 2 c segmentation-fault

我编写了以下简单函数来执行模幂运算.但是,当指数参数大于约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;
}
Run Code Online (Sandbox Code Playgroud)

Ed *_* S. 5

@ouah已经在评论中发布了答案,所以如果他想发一个答案,我会删除它.

你有一个堆栈溢出.您正在递归太多次并且会浪费您的堆栈空间.C++不保证尾部调用优化(即使你最后没有对递归调用的返回值进行该操作),所以最好使用循环实现它.

如果你想坚持递归路由,请尝试通过这里的解释使其真正的尾递归,看看编译器是否帮助你.