JS Code block 代码块–Math
星期一, 2023-04-17 | Author: Lee | computer, 前端 | 1,301 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), []); } |
文章作者: Lee
本文地址: https://www.pomelolee.com/2379.html
除非注明,Pomelo Lee文章均为原创,转载请以链接形式标明本文地址
No comments yet.
Leave a comment
Search
相关文章
热门文章
最新文章
文章分类
- ajax (10)
- algorithm-learn (3)
- Android (6)
- as (3)
- computer (85)
- Database (30)
- disucz (4)
- enterprise (1)
- erlang (2)
- flash (5)
- golang (3)
- html5 (18)
- ios (4)
- JAVA-and-J2EE (186)
- linux (143)
- mac (10)
- movie-music (11)
- pagemaker (36)
- php (50)
- spring-boot (2)
- Synology群晖 (2)
- Uncategorized (6)
- unity (1)
- webgame (15)
- wordpress (33)
- work-other (2)
- 低代码 (1)
- 体味生活 (40)
- 前端 (21)
- 大数据 (8)
- 游戏开发 (9)
- 爱上海 (19)
- 读书 (4)
- 软件 (3)