この小さなプログラムは、階乗を計算する 2 つのアプローチ (反復による方法と再帰による方法) をテストします。
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
インターネットで最も信頼できる情報源によると、数字が小さい場合は問題ありませんが、そうでない場合 (例: 60 の場合) は正しくない値が出力されます。私の間違いを指摘していただけますか?まったく異なる 2 つの方法が、まったく同じように機能しないとは信じられません。