这个小程序测试了两种计算阶乘的方法 - 迭代和递归。
Factorial.cs:
using System;
namespace Functions
{
public class Factorial
{
public static ulong CalcRecursively(int number)
{
if (number > 1)
return (ulong)number * CalcRecursively(number - 1);
if (number <= 1)
return 1;
return 0;
}
public static ulong Calc(int number)
{
ulong rValue=1;
for (int i = 0; i < number; i++)
{
rValue = rValue * (ulong)(number - i);
}
return rValue;
}
}
}
MainProgram.cs:
using System;
using Functions;
class FunctionClient
{
public static void Main()
{
Console.WriteLine("{0}\n", Functions.Factorial.CalcRecursively(TESTED_VALUE));
Console.WriteLine("{0}\n", Functions.Factorial.Calc(TESTED_VALUE));
Console.ReadKey();
}
const int TESTED_VALUE = 60;
}
控制台:
9727775195120271360
9727775195120271360
低数字可以正常,但除此之外(f.ex.with 60)根据the most reliable source on the internet输出不正确的值。你能指出我的错误吗?对我来说,两种完全不同的方法以完全相同的方式工作是不可能的。
答案 0 :(得分:7)
您正在遇到C#的ulong数据类型的限制。它是一个64位数据结构,根据MSDN将其限制为最大值18,446,744,073,709,551,615。
如果你想探索更大的数字,.NET 4引入了你可能感兴趣的BigInteger structure。
答案 1 :(得分:2)
using System.Numerics;
public static BigInteger Calc(int number)
{
BigInteger rValue = 1;
for (int i = 0; i < number; i++)
{
rValue = rValue * (ulong)(number - i);
}
return rValue;
}
添加对System.Numerics的引用