Наибольший общий делитель
Когда писал планировщик таймерных событий на lua, потребовался механизм нахождения наибольшего общего делителя, чтобы правильно квантовать временные промежутки. Получилась элегантная рекурсивная функция, использующая хвостовую рекурсию языка lua, находящая наибольший общий делитель для произвольного количества чисел:
function math.nod(a,b,...)
if b == nil then return a end
while a ~= 0 and b ~= 0 do
if a > b then
a = a % b
else
b = b % a
end
end
return math.nod(a + b,...)
end