Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.05.2018, 00:31
Интересующийся
Отправить личное сообщение для RuBrain Посмотреть профиль Найти все сообщения от RuBrain
 
Регистрация: 20.04.2018
Сообщений: 21

Подскажите с функцией
Изучаю JS по книге Флэнагана, в книге есть такой пример:

// Compute factorials and cache results as properties of the function itself.
function factorial(n) {
    if (isFinite(n) && n>0 && n==Math.round(n)) { // Finite, positive ints only
        if (!(n in factorial)) // If no cached result
            factorial[n] = n * factorial(n-1); // Compute and cache it
        return factorial[n]; // Return the cached result
    }
    else return NaN; // If input was bad
}
factorial[1] = 1; // Initialize the cache to hold this base case.


Не догоняю почему функция вызывается таким странным образом? Дебагер в WebStorm'е не залетает вообще в функцию при запуске.

Последний раз редактировалось RuBrain, 09.05.2018 в 09:55.
Ответить с цитированием
  #2 (permalink)  
Старый 09.05.2018, 01:01
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 498

factorial[n] = n * factorial(n-1);
- вы про это? Обычная рекурсия...
Ответить с цитированием
  #3 (permalink)  
Старый 09.05.2018, 05:48
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Чтобы что-то догнать надо отформатировать код хотя бы.
Ответить с цитированием
  #4 (permalink)  
Старый 09.05.2018, 09:48
Интересующийся
Отправить личное сообщение для RuBrain Посмотреть профиль Найти все сообщения от RuBrain
 
Регистрация: 20.04.2018
Сообщений: 21

Сообщение от Белый шум Посмотреть сообщение
factorial[n] = n * factorial(n-1);
- вы про это? Обычная рекурсия...
С рекурсией то все как раз понятно. Не понятно как вызывается функция:

factorial[1] = 1;
Ответить с цитированием
  #5 (permalink)  
Старый 09.05.2018, 09:53
Интересующийся
Отправить личное сообщение для RuBrain Посмотреть профиль Найти все сообщения от RuBrain
 
Регистрация: 20.04.2018
Сообщений: 21

Сообщение от Rise Посмотреть сообщение
Чтобы что-то догнать надо отформатировать код хотя бы.
Код скопипастен из книги в отформатированном виде, не знаю почему тут все влево сдвинулось. Поправил, понять не помогло.

Последний раз редактировалось RuBrain, 09.05.2018 в 09:59.
Ответить с цитированием
  #6 (permalink)  
Старый 09.05.2018, 10:00
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Здесь нет вызова функции, только определение функции и инициализация статической переменной.
Ответить с цитированием
  #7 (permalink)  
Старый 09.05.2018, 16:05
Интересующийся
Отправить личное сообщение для RuBrain Посмотреть профиль Найти все сообщения от RuBrain
 
Регистрация: 20.04.2018
Сообщений: 21

Сообщение от Rise Посмотреть сообщение
Здесь нет вызова функции, только определение функции и инициализация статической переменной.
Понятно, попробовал factorial(5), все правильно он посчитал и сохранил значение в factorial[5]. Подскажите, какой отладчик лучше использовать для JS кода? Я поставил WebStorm, но почему-то рекурсию в нем я не смог проследить у этой функции, в цикл на первом проходе заходит, а дальше выскакивает и сразу выдает готовый результат. Лучше JS код прикручивать к HTML-у и в броузере отлаживать?
Ответить с цитированием
  #8 (permalink)  
Старый 09.05.2018, 16:19
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

В браузере хороший отладчик.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите как правильно сделать анимацию выезда ? Валерий1996 Общие вопросы Javascript 1 06.09.2015 12:49
Подскажите с анимацией Vasy Общие вопросы Javascript 15 10.04.2013 19:35
Несколько сценариев одной функцией Marker Events/DOM/Window 19 19.01.2013 00:40
Не правильно работает прокрутка, подскажите как сделать правильно? denfer12 Общие вопросы Javascript 0 09.05.2012 00:34
подскажите, как сделать индикатор «до начала загрузки страницы»? SergAG Элементы интерфейса 7 31.05.2011 19:53