如何不使用除法运算符、循环或递归,基于函数式编程实现除法函数
整数除法的函数式实现方案
原命令式除法的核心逻辑是统计被除数可以被减多少次除数,最终得到的次数即为正整数场景下的整数商,我们可以借助数组高阶函数实现相同逻辑,完全规避循环、递归和除法运算符,符合函数式编程要求:
const divide = (dividend, divisor) => // 生成与被除数长度一致的空数组,用于触发reduce遍历 Array.from({ length: dividend }) .reduce( // 状态数组第一个元素为剩余值,第二个元素为商计数 ([remaining, count]) => remaining >= divisor ? [remaining - divisor, count + 1] : [remaining, count], // 初始状态:剩余值为被除数,初始计数为0 [dividend, 0] )[1]; console.log(divide(100, 2)); // 输出:50
实现逻辑说明
- 全程使用纯函数、无副作用的写法,符合函数式编程范式
- 通过
Array.from生成指定长度的数组,无需手动构造循环 - 借助
reduce方法维护遍历过程中的状态,不需要额外的可变变量,也不需要递归逻辑 - 最终实现效果和原命令式函数完全一致,仅支持正整数的整数除法运算,如果需要兼容负数、0等边界场景,可额外补充参数校验逻辑调整状态判断规则即可。
内容的提问来源于stack exchange,提问作者David Angarita
相关产品推荐
相关产品推荐

