Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Подскажите с функцией (https://javascript.ru/forum/misc/73716-podskazhite-s-funkciejj.html)

RuBrain 09.05.2018 00:31

Подскажите с функцией
 
Изучаю 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'е не залетает вообще в функцию при запуске.

Белый шум 09.05.2018 01:01

factorial[n] = n * factorial(n-1);
- вы про это? Обычная рекурсия...

RuBrain 09.05.2018 09:48

Цитата:

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

С рекурсией то все как раз понятно. Не понятно как вызывается функция:

factorial[1] = 1;

RuBrain 09.05.2018 09:53

Цитата:

Сообщение от Rise (Сообщение 484937)
Чтобы что-то догнать надо отформатировать код хотя бы.

Код скопипастен из книги в отформатированном виде, не знаю почему тут все влево сдвинулось. Поправил, понять не помогло. :)

RuBrain 09.05.2018 16:05

Цитата:

Сообщение от Rise (Сообщение 484944)
Здесь нет вызова функции, только определение функции и инициализация статической переменной.

Понятно, попробовал factorial(5), все правильно он посчитал и сохранил значение в factorial[5]. Подскажите, какой отладчик лучше использовать для JS кода? Я поставил WebStorm, но почему-то рекурсию в нем я не смог проследить у этой функции, в цикл на первом проходе заходит, а дальше выскакивает и сразу выдает готовый результат. Лучше JS код прикручивать к HTML-у и в броузере отлаживать?


Часовой пояс GMT +3, время: 09:10.