GCD / НОД

Пример с деструктуризацией

Задачка для собеседования — написать функцию вычисления наибольшего общего делителя — НОД (GCD).

Наибольший общий делитель целых чисел — это наибольшее из натуральных чисел, которое делит каждое из данных чисел. Например gcd(30,15) = 15.

Пример решений на ES6+ с деструктуризацией

Цикл

function gcd(x, y) {
while (y != 0) [ x, y ] = [ y, x%y ]
return x
}

Рекурсивный вариант

const gcd = (x, y) => y == 0 ? x : gcd(...([ x, y ] = [ y, x%y ]))

Расширяем до N-аргументов

Далее можно попросить изменить решение так, чтобы можно было передать несколько аргументов. Можно, конечно, переписать реализацию, но я бы посоветовал использовать функциональный подход, превратив вышеописанную функцию в базовую, а отдельно написал бы входную функцию редьюсер:

// переименовываем gcd в gcd42n // 42n - for two numbers// Создаем новую функцию редьюсер
const gcd = (...a) =>
a.reduce((a,i) => gcd42n(a,i), 0)
;
// Проверяем
gcd(16,-48,72) // 8

Александр Майоров / Alexander Mayorov — ProWEBIT

Written by

Активист программного комитета FrontendConf. CTO and co-founder at New.HR & GeekJOB.ru

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade