Здравствуйте, Oyster, Вы писали:
O>O>namespace Oyster
O>{
O> public module Math
O> {
O> // Просто метод, который просто считает факториал в рантайме
O> static public Fact(x : int) : int
O> {
O> | 1 => 1
O> | _ =>
O> if (x > 1)
O> x * Fact(x - 1)
O> else
O> throw ArgumentException("x")
O> }
O> }
O>}
O>
Кстати, раз уж мы говорим о функциональном языке, то факториалы лучше тоже в функциональном стиле описывать:
def Fact(x : uint) : ulong
{
def Loop(acc : ulong, x : uint)
{
if (x <= 1) acc else Loop(acc * x, x - 1)
};
Loop(1UL, x)
}
WriteLine(Fact(20));
Учитывая не нениальный оптимизатор данный код окажется самым шустрым, так как он использует концевую рекурсию. Компилятор развернет концевую рекурсии и подставить вычисление прямо по месту. Думаю процентов 20% на этом можно выиграть.
... << RSDN@Home 1.2.0 alpha rev. 637>>