【问题标题】:Recursive Factorial Function - Displaying method递归阶乘函数 - 显示方法
【发布时间】:2018-06-24 03:48:08
【问题描述】:

如何将方法与答案一起显示?

例如用户输入 = 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);
}

非常感谢任何帮助

【问题讨论】:

  • 这里没有看到任何递归

标签: function recursion factorial


【解决方案1】:

这是另一种使用可选参数和默认值的方法

  • 阶乘函数的基本情况是n = 0n = 1 其中factorial (n) = 1
  • 在所有其他情况下,n * factorial (n - 1)

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

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

同样的函数使用 ES6 字符串模板

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

【讨论】:

    【解决方案2】:

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

    您也计算了不正确的阶乘。

    这样的东西给出了想要的输出:

    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/

    【讨论】:

      猜你喜欢
      • 2019-08-06
      • 1970-01-01
      • 2015-04-16
      • 1970-01-01
      • 2017-05-07
      • 2012-04-01
      • 2015-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多