1

Я изо всех сил пытаюсь окунуться в тройные операторы, поэтому я подумал, что возьму недавний пример, который мне натолкнулся и понравился, и попытайтесь реорганизовать его в более базовую (хотя и многословную) нотацию. Однако моя реализация вызывает ошибку, в то время как тройная версия, которую я пытаюсь восстановить, работает нормально.Реализация Euclidean GCF приводит к «Ошибка диапазона: превышен максимальный размер стека вызовов».

Тройная версия алгоритма Евклида для вычисления GCF из двух чисел:

function gcd(a, b) { 
     return !b ? a : gcd(b, a % b); 
    } 

И моя попытка ее реализации

function gcf2(a, b) { 
    if(b !== a){ 
     gcf2(b, a % b); 
    } 
    else { 
     g = b; 
    } 
    } 

Я прочитал описание MDN тройных операторов, но ясно, что я еще не понимаю его из результатов.

+0

Какую часть вы не понимаете? Первая функция оценивает '! B'. Если он оценивает значение 'true', он возвращает' a', иначе он возвращает 'gcd (b, a% b)'. –

ответ

1

Путь для преобразования тройного в если иное утверждение заключается в следующем:

function gcd2(a, b) { 
    if (!b) { 
    return a; 
    } 
    else { 
    return gcd2(b, a % b); 
    } 
} 

Тройная в основном говорит: «Если б это falsy, возвращает Else обратный НОД (Ь, а% б).»

Смежные вопросы