Факториал

Сегодня потребовалась. Сохраню на всякий случай. Варианта на чистом qpile нет, но нетрудно подправить, отличий практически нет.

 Func Factorial(result)
    Local(i,Factor)

     if result < 0 or Floor(result) != result
          Return(0)
     end if

     Factor = 1
     for i from 2 to result
           Factor = Factor * i
     end for
EndFunc(Factor)

 


Кстати, препроцессор M4 не имеет встроенных средств для вычисления факториала - решается написанием макроса 

define(`Factorial',`eval(1 forloop(`i',2,$1,`*i') )')

Например, Factorial(5) будет рекурсивно развернут на этапе препроцессора в число 120.

 


На QLua факториал считается рекурсивно:

 

function factorial(n)
    if (n == 0) then
        return 1
    else
        return n * factorial(n - 1)
    end
end

for n = 0, 16 do
    io.write(n, "! = ", factorial(n), "\n")
end

 

Добавить комментарий


Защитный код
Обновить