是否可以通过使用递归函数使堆栈溢出?

dtu*_*y68 0 c c++ stack-overflow recursion stack

这个功能有一些问题吗?

 unsigned long factorial(unsigned long m)
 {
     return (m == 0) ? 1 : m * factorial(m - 1);
 }
Run Code Online (Sandbox Code Playgroud)

如果我添加另一个功能:

  int myCombina(int q, int p)
  {
      return factorial(q) / ( factorial(q) * factorial(q-p) );
  }
Run Code Online (Sandbox Code Playgroud)

这个myCombina()效率不高,因为应该取消最大公约数以找到组合.

max(factorial(q),factorial(qp))可以被取消.我们只需要计算qx(q-1)... x(q -k +1).

还有其他问题吗?

欢迎任何评论.

谢谢

Mar*_*ers 8

如果m非常大,则可能有堆栈溢出.

堆栈溢出不是代码的主要问题...如果m非常大,您将在堆栈溢出之前获得整数溢出.

如果您希望这种方法适用于大于12的m(取决于unsigned long平台的大小),则需要使用某种Bignum类型.

  • 米很大?例如30? (4认同)