没有运算符的JS递归乘法功能

时间:2018-10-17 10:22:46

标签: javascript recursion

我想创建一个以两个数字为参数的location函数 并返回这两个乘积的结果,而无需使用运算符*或/和无循环。 当我这样做时,出现最大调用堆栈大小超出错误

multiply

2 个答案:

答案 0 :(得分:1)

网站https://medium.com/@ctrlalt_diljeet/multiply-without-using-in-javascript-890857bb003c提供了一个很好的例子。您可以通过检查输入是否为负数来处理预期结果小于0的数字来扩展它

function multiply(a, b){
    return ("i").repeat(a).repeat(b).length    
}

答案 1 :(得分:0)

对于(正)整数值,您可以使用Ancient Egyptian multiplication,方法是通过位移位来添加奇数。

 a   b   sum  comment
--  --  ----  -----------------
 5   7     7  add b if a is odd
 2  14     7
 1  28    35  add b if a is odd
 0  56    35  result
 ^----------- exit condition

function multiply(a, b) {
    if (!a) { return 0; }
    return a & 1
        ? b + multiply(a >> 1, b << 1)
        : multiply(a >> 1, b << 1);
}

console.log(multiply(5, 7));