javascript递归参数递减

Del*_*son 3 javascript recursion parameter-passing

你好我是新学习递归但我不知道解决这个问题,导致这个使用2参数,我不知道如何返回2参数.

这是正常的循环,not a recursive但导致我不知道如何将其更改为recursive:

function deret2(num,num2){
  var tampung = 1;
   for (var i= num; i >= 1 ; i-= num2){

    tampung = tampung * i ;
  }
  console.log(tampung);
}
deret2(12,5); //12* 7 * 2 = 168
Run Code Online (Sandbox Code Playgroud)

编辑:我做的递归:

function deret(num,num2) {
  //var tampung = 1;
  if (num <= 0) { // terminal case
    return 1;
  } else 
  { // block to execute
    return num * deret(num-num2,num2); 
  }
};
deret(12,5);
Run Code Online (Sandbox Code Playgroud)

它不会起作用number* deret(2 arguments here)吗?? 这就是为什么我不知道如何使用2个参数进行递归,你怎么能保存它并将它与2个参数相乘?

Nin*_*olz 7

你可以使用带有check的递归函数.

你需要一个递归函数检查递归是否应该停止,或者函数是否应该使用相同或更改的参数再次调用.然后在两种情况下都需要返回值.

经验法则,乘法返回作为最后一个值1和添加0.

num  num2  return
---  ----  ------------------
 12     5  12 * deret2(7, 5)
  7     5   7 * deret2(2, 5)
  2     5   2 * deret2(-3, 5)
 -3     5   1
Run Code Online (Sandbox Code Playgroud)

function deret2(num, num2) {
    return num >= 1 ? num * deret2(num - num2, num2) : 1;
}

console.log(deret2(12, 5)); //12* 7 * 2 = 168
Run Code Online (Sandbox Code Playgroud)

用if语法.

function deret2(num, num2) {
    if (num >= 1) {
        return num * deret2(num - num2, num2);
    } else {
        return 1;
    }
}

console.log(deret2(12, 5)); //12* 7 * 2 = 168
Run Code Online (Sandbox Code Playgroud)

奖金:最短的版本.

function deret2(num, num2) {
    return +(num < 1) || num * deret2(num - num2, num2);
}

console.log(deret2(12, 5)); //12* 7 * 2 = 168
Run Code Online (Sandbox Code Playgroud)

  • 不确定是否有人询问递归是什么可以理解短路?无论如何,好的和简短的答案! (2认同)