美文网首页
FreeCodeCamp:计算一个整数的阶乘 (Factoria

FreeCodeCamp:计算一个整数的阶乘 (Factoria

作者: 刺破羽毛 | 来源:发表于2020-01-09 23:11 被阅读0次

题目:
计算一个整数的阶乘
如果用字母n来代表一个整数,阶乘代表着所有小于或等于n的整数的乘积。
阶乘通常简写成n!
例如:5! = 1 * 2 * 3 * 4 * 5 = 120
问题解释:
这个 function 接收一个整数为参数,返回阶乘的计算结果
比如接收的是 4,那么就返回 24


基本解法:
做一个循环,把每一步的数乘起来即可
注意,0的阶乘和1的阶乘均为1
代码:

function factorialize(num) {
    var result = 1;
    while (num > 1) {
        result *= num;
        num--;
    }
    return result;
}

解释:

  • 循环的条件选择num>1就好,因为任何数与1相乘都不变
  • 设置初始值为1,不管传入0还是1,最后得到的结果都是1,,不用进入while循环
  • result *= num就相当于result = result * num
  • 不写num--就会进入无限循环,此处运用for 循环也OK

思考:如果使用reduce方法

  • reduce() 方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。

  • reducer 函数接收4个参数:
    Accumulator (acc) (累计器)
    Current Value (cur) (当前值)
    Current Index (idx) (当前索引)
    Source Array (src) (源数组)
    reducer 函数的返回值分配给累计器,该返回值在数组的每个迭代中被记住,并最后成为最终的单个结果值。

此时如果要使用reduce,首先要根据传入的num创建一个数组,显而易见,范围是1至num
也可以用Array.from创建,Array.from() 方法从一个类似数组或可迭代对象创建一个新的,浅拷贝的数组实例。

代码:

function factorialize(num) {
    return Array.from(Array(num).keys()).map(e => e + 1).reduce((prev, next) => {
        return prev * next;
    }, 1);
}

解释:
.keys()方法返回一个包含数组中每个索引键的Array Iterator对象。它和from都是ES6语法
.key()返回的是类数组,而且为从0开始,我们需要的是从1开始返回的数组,所以在map中加上1


再思考一下,此题可以用递归解法

function factorialize(num) {
    // 初始及弹出条件
    if (num === 0) {
        return 1;
    }
    // 递归调用
    return num * factorialize(num - 1)
}

上述代码的具体解释可查看翻转字符串的解释
代码中第三行条件若更改为num === 1,那么此时传入0是无法得到1的
最后,如果输入数字很大,那么就会发生栈溢出(stack overflow)的情况,FreeCodeCamp中并不要求此项,如有需要,自行搜索学习“尾递归优化”。


参考文章:S1ngS1ng:https://singsing.io/blog/fcc/basic-factorialize-a-number/

相关文章

  • FreeCodeCamp:计算一个整数的阶乘 (Factoria

    题目:计算一个整数的阶乘如果用字母n来代表一个整数,阶乘代表着所有小于或等于n的整数的乘积。阶乘通常简写成n!例如...

  • FreeCodeCamp 初级算法题 - 计算整数阶乘

    原文链接:http://singsing.io/blog/2017/03/17/fcc-basic-factori...

  • Factorialize a Number

    计算一个整数的阶乘 如果用字母n来代表一个整数,阶乘代表着所有小于或等于n的整数的乘积。 阶乘通常简写成 n!

  • FCC-JS-BAS-Factorialize a Number

    计算一个整数的阶乘 如果用字母n来代表一个整数,阶乘代表着所有小于或等于n的整数的乘积。 阶乘通常简写成 n! 例...

  • FCC - 253 计算一个整数的阶乘

    计算一个整数的阶乘 如果用字母n来代表一个整数,阶乘代表着所有小于或等于n的整数的乘积。 阶乘通常简写成 n! 例...

  • javascript递归算法计算一个数的阶乘

    计算一个整数的阶乘 如果用字母n来代表一个整数,阶乘代表着所有小于或等于n的整数的乘积。 阶乘通常简写成 n! 例...

  • JavaScript pratice2

    问题描述: 计算所提供整数的阶乘。如果使用字母n代表一个整数,则阶乘是所有小于或等于n的整数的乘积。阶乘通常简写成...

  • 阶乘算法的实现

    计算所提供整数的阶乘。 如果使用字母n代表一个整数,则阶乘是所有小于或等于n的整数的乘积。阶乘通常简写成 n!例如...

  • 发现一些JS基础算法问题?与大家分享一下

    1.实战翻转字符串算法 2.计算所提供整数的阶乘。 如果使用字母n代表一个整数,则阶乘是所有小于或等于n的整数的乘...

  • 计算一个整数的阶乘

    如果用字母n来代表一个整数,阶乘代表着所有小于或等于n的整数的乘积。 阶乘通常简写成 n! 例如: 5! = 1 ...

网友评论

      本文标题:FreeCodeCamp:计算一个整数的阶乘 (Factoria

      本文链接:https://www.haomeiwen.com/subject/rmquactx.html