Javascript递归与参数递减

javascript recursive with parameters to decrement

本文关键字:参数 递归 Javascript      更新时间:2023-09-26

你好,我是新学习递归,但我不知道如何解决这个问题,因为这个使用两个参数,我不知道如何返回两个参数。

这是正常的循环,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

编辑:我做的递归:

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);

不能工作,因为number* deret(2 arguments here) ??这就是为什么我不知道如何让它变成两个参数的递归,你怎么能保存它并将它乘以两个参数呢?

您可以使用带有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

function deret2(num, num2) {
    return num >= 1 ? num * deret2(num - num2, num2) : 1;
}
console.log(deret2(12, 5)); //12* 7 * 2 = 168

使用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

奖励:最短的版本。

function deret2(num, num2) {
    return +(num < 1) || num * deret2(num - num2, num2);
}
console.log(deret2(12, 5)); //12* 7 * 2 = 168

递归函数调用自己,并且使用额外的参数,我们不需要跟踪变化的变量。循环和递归非常密切相关,以至于转换是机械的。

function deret2(num,num2,tampung){
  if (num >= 1) {
    deret2(num - num2, num2, tampung * num);
  } else {
    console.log(tampung);
  }
}
deret2(12,5,1); //12* 7 * 2 = 168

注意,我们现在直接传递tampung的初始值,而不是将其编码到递归中。如果您不希望调用者传递tampung的基值,那么创建一个辅助函数来编码该基值,然后开始递归是相当常见的。

一个递归函数应该在函数内部声明它自己并且有一个stop if条件:

function deret2(startNumber,step){
   if(startNumber>= 1){
     return startNumber * deret2(startNumber - step, step);
   }else{
     return 1;
   }
}
deret2(12,5); //12* 7 * 2 = 168