递归因子函数 - 显示方法

时间:2018-01-15 13:45:06

标签: function recursion factorial

我如何显示方法和答案?

e.g。用户输入= 5,

然后代码输出为“5 * 4 * 3 * 2 * 1 = 120”?

function factorial(n)
{
    var result = n;
    for (var i = 1; i < n; i ++)
    {
        result = i * result;
    }
    alert("The answer is " + result);
}

非常感谢任何帮助

2 个答案:

答案 0 :(得分:1)

以下是使用可选参数和默认值

的另一种方法
  • 阶乘函数的基础案例为n = 0n = 1其中factorial (n) = 1
  • 在所有其他情况下,n * factorial (n - 1)

我们添加第二个参数acc,作为因子最终值的累加器。这允许我们同时构建字符串结果并使用递归计算阶乘的数字答案。

&#13;
&#13;
const factorial = (n, acc = 1) =>
  n < 2
    ? '1 = ' + acc
    : String (n) + ' * ' + factorial (n - 1, acc * n)

console.log (factorial (0))
// 1 = 1

console.log (factorial (1))
// 1 = 1

console.log (factorial (5))
// 5 * 4 * 3 * 2 * 1 = 120

console.log (factorial (9))
// 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 362880
&#13;
&#13;
&#13;

使用ES6字符串模板的相同功能

&#13;
&#13;
const factorial = (n, acc = 1) =>
  n < 2
    ? `1 = ${acc}`
    : `${n} * ${factorial (n - 1, acc * n)}`

console.log (factorial (0))
// 1 = 1

console.log (factorial (1))
// 1 = 1

console.log (factorial (5))
// 5 * 4 * 3 * 2 * 1 = 120

console.log (factorial (9))
// 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 362880
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您希望实现的输出是字符串而不是整数解。因此,您应该包含在函数内部构建此字符串的逻辑。

您也在错误地计算阶乘。

这样的东西给出了所需的输出:

function factorial(n)
{
    var result = 1;
    var output_string = "";
    for (var i = n; i > 0; i --)
    {
        result *= i;
        if(i!=1) {
            output_string += i + " * ";
        } else {
            output_string += i;
        }
    }
    output_string += " = " + result;
    alert(output_string);
}

https://jsfiddle.net/rwpwb3yf/