произведение последовательности (факториал) javascript - PullRequest
1 голос
/ 01 марта 2020

Идея состоит в том, чтобы найти числа в последовательности .. уравнение pi c:

equation image

var pat = document.getElementById("pattern");
var nMax = 96; 

for (var n = 2; n <= 96; n++) {
    if (n != 96)
    	pat.innerHTML += 1000 * (999 - 10 * (n - 2))/(1000 - 10 * (n - 2)) + ", ";
    else
        pat.innerHTML += 1000 * (999 - 10 * (n - 2))/(1000 - 10 * (n - 2)) + ",&hellip;";
}
<body>
    <p id="pattern"></p> 
</body>

Но проблема в том, что pat.inner HTML не умножает все предыдущие n чисел. Идея состоит в том, чтобы создать последовательность:

a(2) = 1000 * (999 - 10 * (2 - 2))/(1000 - 10 * (2 - 2)) 
a(3) = 1000 * (999 - 10 * (2 - 2))/(1000 - 10 * (2 - 2)) * (999 - 10 * (3 - 2))/(1000 - 10 * (3 - 2))
a(4) = a(3) * (999 - 10 * (4 - 2))/(1000 - 10 * (4 - 2))

et c .. Как мне это сделать? (См. Pi c для уравнения в правильной математической записи.)

Ответы [ 2 ]

1 голос
/ 01 марта 2020

Лучший способ - создать вспомогательный метод для расчета. Если вы поставите другое значение для l oop, тогда добавьте новые значения точно так же, как математические потребности.

/*
 Formula
*/

function calcFactoriel(arg) {

 var a = 0; // for numbers
 var b = ""; // for string
 
 for (var x = arg; x > 1; x--) {
 
    if (a == 0) {
      a = 1000 * (999 - 10 * (x - 2))/(1000 - 10 * (x - 2))  
    } else {
      a *= 1000 * (999 - 10 * (x - 2))/(1000 - 10 * (x - 2))  
    }
    
    b = "<div class='m' >" +  a + " , </div> ";
    
 }
 
 return b;
}

var pat = document.getElementById("pattern");
var nMax = 96; 

for (var n = 2; n <= nMax; n++) {
    	pat.innerHTML += calcFactoriel(n);
}
.m {
 color: rgba(0,0,0,0.6);
 background: #629552;
 text-shadow: 2px 8px 6px rgba(0,0,0,0.2), 0px -5px 35px rgba(255,255,255,0.3);
}
<body>
    <p id="pattern"></p> 
</body>
1 голос
/ 01 марта 2020

Похоже, вам просто нужно отслеживать постоянную переменную, которая содержит результат последней итерации, и вычислять результат для текущей итерации, умножая ее. Последовательность начинается с 1000, поэтому в качестве начального результата укажите:

var pat = document.getElementById("pattern");
let lastResult = 1000;
for (var n = 2; n <= 94; n++) {
  const nextResult = lastResult * ((999 - 10 * (n - 2))/(1000 - 10 * (n - 2)))
  pat.innerHTML += nextResult + '<br>';
  lastResult = nextResult;
}
<body>
    <p id="pattern"></p> 
</body>
...