Javascript 递归乘法函数

Javascript 递归乘法函数,javascript,Javascript,我试图做一个赋值,它要求生成一个函数,将一个正整数乘以123,而不使用循环或*或除法运算符 function multiply(x, y){ if (y === 0) return 0; return x + multiply(x, y - 1); } 我有一个可以乘以2个数的函数,但是我如何构造这个函数来乘以一个固定数呢 function multiply_123(x) { return multiply(x, 123); } 还是好一点 function mul

我试图做一个赋值,它要求生成一个函数,将一个正整数乘以123,而不使用循环或
*
或除法运算符

function multiply(x, y){
    if (y === 0) return 0;
    return x + multiply(x, y - 1);
}
我有一个可以乘以2个数的函数,但是我如何构造这个函数来乘以一个固定数呢

function multiply_123(x) {
     return multiply(x, 123);
}
还是好一点

function multiply_123(x) {
     if(x==0) {
         return 0;
     } else {
         if(x > 123) {
             return multiply(x, 123);
     } else {
         return multiply(123, x);
     }
}
还是好一点

function multiply_123(x) {
     if(x==0) {
         return 0;
     } else {
         if(x > 123) {
             return multiply(x, 123);
     } else {
         return multiply(123, x);
     }
}

如果另一个值为奇数,则可以将该值相加,然后将第一个值的两倍与另一个值的一半相加,最好现在称之为奇数

函数乘法(a,b){
如果(b==1)返回a;
返回(b&1&&a)+乘(a>1);
}
console.log(乘(4,5));

console.log(乘(5,4))如果另一个值为奇数,则可以添加该值,然后添加第一个值的两倍和另一个值的一半的结果,最好现在这样

函数乘法(a,b){
如果(b==1)返回a;
返回(b&1&&a)+乘(a>1);
}
console.log(乘(4,5));

console.log(乘(5,4))您有一个将两个数字相乘的函数,现在您希望有一个只接受一个参数然后“设置”另一个参数的函数。这叫做

这是执行此操作的基本方法-创建一个新函数,该函数只接受一个参数,并使用该参数调用另一个函数以及一个常量:

函数乘法(x,y){
如果(y==0)返回0;
返回x+乘法(x,y-1);
}
函数倍数123(x){
返回乘法(x,123);
}
console.log(倍数123(3));

console.log(倍数123(10))您有一个将两个数字相乘的函数,现在您希望有一个只接受一个参数然后“设置”另一个参数的函数。这叫做

这是执行此操作的基本方法-创建一个新函数,该函数只接受一个参数,并使用该参数调用另一个函数以及一个常量:

函数乘法(x,y){
如果(y==0)返回0;
返回x+乘法(x,y-1);
}
函数倍数123(x){
返回乘法(x,123);
}
console.log(倍数123(3));

console.log(倍数123(10))尾部递归示例:

const mult = (...args) => {
  const [ a, b, ...rest] = args
  if (args.length === 2) {
    return a * b
  }
  return mult(a * b, ...rest)
}

尾部递归示例:

const mult = (...args) => {
  const [ a, b, ...rest] = args
  if (args.length === 2) {
    return a * b
  }
  return mult(a * b, ...rest)
}

这是关于如何不编写代码的练习之一吗?因为在现实世界中使用递归正是您想要避免的。@vitaly-t这可能是递归的介绍-当然,这不是递归的好任务,但它是明确的和定义良好的。很容易看出发生了什么以及为什么会发生。这只是一个挑战,看看我们能有多大的创造力。我想,这肯定不是用于生产的东西。我不清楚你在问什么。您想要一个不传递
y
而使用硬编码值的函数吗?为什么不直接用硬编码的值调用这个函数呢?另外,我认为您的函数缺少退出条件。如果(y===1)
条件也应该存在
,否?是否允许使用位运算符和逻辑运算符?这是关于如何不编写代码的练习之一吗?因为在现实世界中使用递归正是您想要避免的。@vitaly-t这可能是递归的介绍-当然,这不是递归的好任务,但它是明确的和定义良好的。很容易看出发生了什么以及为什么会发生。这只是一个挑战,看看我们能有多大的创造力。我想,这肯定不是用于生产的东西。我不清楚你在问什么。您想要一个不传递
y
而使用硬编码值的函数吗?为什么不直接用硬编码的值调用这个函数呢?另外,我认为您的函数缺少退出条件。如果(y==1)
条件也存在,则可能存在
,否?是否允许使用位运算符和逻辑运算符?