Способ определения четности JavaScript

157
08 мая 2019, 18:30

В книге нашел способ определения четности:

function isEven(n) { 
  if (n == 0) return true; 
  else if (n == 1) return false; 
  else return isEven(n - 2); 
} 
 
console.log(isEven(50)); 
// → true 
console.log(isEven(75)); 
// → false

То, что если n = 0 true (четное) и если 1 то false (нечетное), я понимаю. Но почему при добавлении этой строки else return isEven(n - 2); любое число начинает определяться как false либо true?

Answer 1

Поздравляю, Вы первый раз столкнулись с рекурсией. Для ее понимания необходимо некоторое умственное усилие.

function isEven(n) { 
  if (isNaN(n) || n < 0) // guard against bad input 
    return; 
 
  if (n == 0)  
    return true; 
  else if (n == 1)  
    return false; 
  else {  
    console.log("cannot decide yet, call isEven again with (", n, "- 2 )"); 
    return isEven(n - 2); 
  } 
} 
 
console.log(isEven(20));

Answer 2

Эта строка - рекурсивный вызов той же функции, а на вход ей дается исходное число - 2 Рекурсия работает до тех пор, пока исходное число не станет <=1

READ ALSO
Как совместить JSON_REMOVE и JSON_SEARCH в одном запросе?

Как совместить JSON_REMOVE и JSON_SEARCH в одном запросе?

У меня есть таблица test, в которой есть поле json с форматом данных JSONВ этом поле лежит массив [2, 3, 4, 5]

150
Как вывести имя вместо id, SQL?

Как вывести имя вместо id, SQL?

Для изображенной схемы БД необходимо составить запрос, который вернет список всех счетовДля каждого счета выбрать поля номер счета, дата...

160
Несоответствие кода страницы в Chrome и самой страницы [закрыт]

Несоответствие кода страницы в Chrome и самой страницы [закрыт]

Пытаюсь сделать парсер сайта SoundCloud на pythonПри попытке получить код страницы, что через requests, что через Selenium html-код страницы выдается некорректным

175