Наибольший общий делитель

Опубликовано в QLua

Когда писал планировщик таймерных событий на 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

Недостаточно прав для комментирования

Архив QLua