Вычисление рядов с непрерывными корнями в цикле JavaScript

#javascript #math #series

Вопрос:

Хотите вычислить следующий ряд в JavaScript:

введите описание изображения здесь

В частности, код будет использоваться для проверки RHS. Дело в том, чтобы исследовать поведение ряда с увеличением числа членов в выражении.

Следующий JS — это начало:

 var res = 0;
for(var i=0; i < 1000; i  ) {
    res  = Math.sqrt(1   ???)
}
 

… но я не уверен, как непрерывно извлекать корень из корня корня …. в JS?

Программный способ достижения:

 Math.sqrt(1   Math.sqrt(1   Math.sqrt(1   Math.sqrt(1   ....))))
 

для произвольного числа корней.

Я думал о чем-то вроде этого:

 var res = [];
for(var i=1; i <= 1000; i  ) {
    if(res.length > 0) {
        res.push(Math.sqrt(1   res[i - 1]))
    } else {
        res.push(Math.sqrt(1   0))
    }
}
 

Обновить

Ответ @Slevin с использованием рекурсии сработал. Мне пришлось немного скорректировать его, чтобы зафиксировать каждое значение в массиве. Вот версия массива:

 res= [];
function getRoots(number) {
    if (number === 1) {  
        var res_1 = Math.sqrt(1);      
        res.push(res_1)
        return(res_1)    
    } else {
        var res_2 = Math.sqrt(1   getRoots(number - 1));
        res.push(res_2);
        return(res_2)
    }
};

getRoots(1000)
 

Ответ №1:

Я не совсем уверен, но может ли это быть вашим решением?:

 function getRoots(number) {
    if (number === 1) return Math.sqrt(1);
    return Math.sqrt(1   getRoots(number - 1));
}

let result = getRoots(1000);
console.log(result);
 

Здесь рекурсия используется для получения вашего результата. Функция вызывает себя до тех пор, пока не будет выполнено 1000 раз.

Здесь обновленная версия с современным JS (const вместо var для объявления массива) и использованием однострочных строк для обновления массива и возврата значения:

 const results = [];

const getRoots = number => {
    if (number === 1) return results[results.push(Math.sqrt(1)) - 1];
    return results[results.push(Math.sqrt(1   getRoots(number - 1))) - 1];
};

getRoots(1000);

for (let res of results)
    console.log(res);
 

К вашему сведению: Array.prototype.push() возвращает новую длину массива, поэтому мы используем это значение для возврата перенесенного вычисления.

Комментарии:

1. Потому что код используется для проверки RHS. Дело в том, чтобы исследовать поведение ряда с увеличением числа членов в выражении.

2. Обновлено рекурсивной функцией, которая должна выполнить эту работу 🙂

3. Функции рекурсии кажутся правильными, однако мне нужны отдельные термины, возвращаемые в массиве. Я пытаюсь протолкнуть каждый результат рекурсии с помощью вашей функции.

4. Понял. Да, это работает. Я добавил версию массива в свой вопрос в качестве обновления. Спасибо.