JS Code block 代码块–Math

星期一, 2023-04-17 | Author: Lee | computer, 前端 | 580 views

Math
计算两点的距离
组合C
求最大公约数
是否可以整除
最小公倍数
斐波那契数组生成器

/**
* 计算两点的距离
* @param x0 两点的坐标
* @param y0
* @param x1
* @param y1
* @return {number}
*/
function distance(x0, y0, x1, y1) {
    return Math.hypot(x1 - x0, y1 - y0)
}
 
/**
 * 求:组合C(m, n),m为上标,n为下标。m选n的所有项
 * m {必传} 原始数据
 * n {必传} 当前项还需元素的个数
 * currentIndex 当前索引
 * choseArr 当前项的部分元素集合(不是完整项,是生成完整项的一个中间状态)
 * result 所有项的结果结合
 * 例子:
 * var arr1 = ['a', 'b', 'c', 'd']
 & console.log('arr1111', cmn(arr1, 2))
 */
function cmn(m, n, currentIndex = 0, choseArr = [], result = []) {
    let mLen = m.length
    // 可选数量小于项所需元素的个数,则递归终止
    if (currentIndex + n > mLen) {
        return
    }
    for (let i = currentIndex; i < mLen; i++) {
        // n === 1的时候,说明choseArr在添加一个元素,就能生成一个新的完整项了。
        // debugger
        if (n === 1) {
            // 再增加一个元素就能生成一个完整项,再加入到结果集合中
            result.push([...choseArr, m[i]])
            // 继续下一个元素生成一个新的完整项
            i + 1 < mLen && cmn(m, n, i + 1, choseArr, result)
            break
        }
        // 执行到这,说明n > 2,choseArr还需要两个以上的元素,才能生成一个新的完整项。则递归,往choseArr添加元素
        cmn(m, n - 1, i + 1, [...choseArr, m[i]], result)
    }
    return result
}
 
/**
* 求最大公约数
* @param a
* @param b
* @return {*}
*/
function gcd(a, b) { 
    let x = a, y = b; 
    function _gcd (_x, _y) {
        return !_y ? _x : _gcd(_y, _x % _y)
    }
    return _gcd(a, b);
}
 
/**
* 是否可以整除
* @param dividend 被除数
* @param divisor 除数
* @return {boolean}
*/
function isDivisible (dividend, divisor) {
    return dividend % divisor === 0
}
 
/**
* 最小公倍数
* @param x
* @param y
* @return {number}
*/
function lcm (x, y) {
    const gcd = (x, y) => !y ? x : gcd(y, x%y);
    return Math.abs(x * y) / (gcd(x, y));
}
 
/**
 * 斐波那契数组生成器
 * 创建一个特定长度的空数组,初始化前两个值(0和1)。使用Array.reduce()向数组中添加值,后面的一个数等于前面两个数相加之和(前两个除外)。
 * @since 1.2.1
 * @param num
 * @returns {*}
 * @example
 * fibonacci(5);
 * // => [0,1,1,2,3]
 */
function fibonacci(num) {
  return Array(num).fill(0).reduce((acc, val, i) => acc.concat(i > 1 ? acc[i - 1] + acc[i - 2] : i), []);
}

Tags:

文章作者: Lee

本文地址: https://www.pomelolee.com/2379.html

除非注明,Pomelo Lee文章均为原创,转载请以链接形式标明本文地址

No comments yet.

Leave a comment

Search

文章分类

Links

Meta