private static int myFactorial(int num)
        {
            if (num == 0 || num == 1)
            {
                return 1;
            }
            else
            {
                return num * myFactorial(num - 1);
            }
我用这个公式求阶乘,可是输入很大的数值时,结果是0,输入很小数时才有结果,这是什么原因?
请问怎么用递归求一个大数的阶乘? C#

解决方案 »

  1.   

    看看雪尘的文章http://blog.csdn.net/Snowdust/archive/2010/03/18/5392444.aspx我觉得这个运算速度很快
      

  2.   

    很大数值时 可能溢出了 判断是不是溢出 C#有关键字checked unchecked
    自己找找看~还有很大数值应该用其他算法把
    什么算法 我就不懂了
      

  3.   

    因为n!的位数相对n来说增长很快,以int32的精度这样算 n!,n=16的时候就会溢出。
    算n!核心问题就是处理进位。乘法的本质是加法运算,基本思想是用复杂对象序列保存每一步的中间值,最后求和的过程。这种计算方式决定了使用递归的方法。
      

  4.   

    int 范围较小,可以使用.net 4里面的System.Numerics.BigInteger类
    可以参考http://topic.csdn.net/u/20100414/23/bdebe83d-6554-4eec-836d-63b9ed6f07fa.html?10822