【发布时间】:2012-07-25 19:49:58
【问题描述】:
这个小程序测试了计算阶乘的两种方法——通过迭代和递归。
Factor.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
根据the most reliable source on the internet,可以使用低数字,但否则(例如,60)它会输出不正确的值。你能指出我的错误吗?对我来说,这两种完全不同的方法以完全相同的方式出错,这让我难以置信。
【问题讨论】:
-
我对 C# 不是很有经验,但我有预感。 ulong 的范围是 0 到 18,446,744,073,709,551,615 而 60! = 8320987112741390144276341183223364380754172606361245952449277696409600000000000000 我想你可能会在这里看到问题。
-
至少,给出一个错误案例的例子,包括预期值和实际值。
-
@HenkHolterman 他做到了。 (预期在链接中。)
标签: c# console console-application factorial