Как я могу выписать каждое отдельное число, а также символ звездочки при расчете факториала числа? - PullRequest
0 голосов
/ 24 февраля 2020

Я застрял в проблеме, которая требует, чтобы я отображал полную работу факториальной функции, например, если пользователь хотел тренироваться 6 !, мне нужно было бы отобразить: 6 * 5 * 4 * 3 * 2 * 1 = 720. Нужно ли мне использовать массив для таких целей?

Это то, что у меня есть до сих пор, чтобы рассчитать факторизованное значение любого заданного пользователем числа, хотя это только выводит окончательное значение, и не полностью расширенная разработка, как я показал выше:

(номер переменной содержит ввод пользователя);

var f = [];
function factorizeFunction(number) { //this is the function that does the factorization calculations
  if (number == 0 || number == 1)
    return 1;
  if (f[number] > 0)
    return f[number];
  return f[number] = factorizeFunction(number-1) * number;
}
document.getElementById("factorialTest").innerHTML = factorizeFunction(number);

любая помощь по этому вопросу будет принята!

Ответы [ 3 ]

2 голосов
/ 24 февраля 2020

Одна опция на каждой итерации - pu sh для массива, который передается через рекурсивный вызов (или создается при первоначальном вызове). В конце возвращаем массив, к которому присоединяется *, а также сумму массива:

function factorizeFunction(number, arr = []) { //this is the function that does the factorization calculations
  if (number == 0 || number == 1) arr.push(number);
  else {
    arr.push(number);
    factorizeFunction(number - 1, arr);
  }
  return arr.join(' * ') + ' = ' + arr.reduce((a, b) => a * b, 1);
}
document.getElementById("factorialTest").innerHTML = factorizeFunction(5);
<div id="factorialTest"></div>
0 голосов
/ 24 февраля 2020

Вы можете изменить возвращаемую сигнатуру функции и ожидать массив массива с факторами и произведением.

function factorize(number) {
    if (number === 0 || number === 1) return [[1], 1];
    var [factors, product] = factorize(number - 1);
    return [[...factors, number], product * number];
}

console.log(factorize(5));
0 голосов
/ 24 февраля 2020

Используйте map и join методы.

const factorString = num => {
    const nums = new Array(num).fill(0).map((_, i) => num - i);
    let res = 1;
    nums.forEach(x => res *= x);
    return `${nums.join(' * ')} = ${res}`;
}

console.log(factorString(6))
...