Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带递减参数的javascript递归_Javascript_Recursion_Parameter Passing - Fatal编程技术网

带递减参数的javascript递归

带递减参数的javascript递归,javascript,recursion,parameter-passing,Javascript,Recursion,Parameter Passing,你好,我是新手,但我不知道如何解决这个问题, 因为这一个使用了2个参数,我不知道如何返回2个参数 这是正常的循环,不是递归的,但我不知道如何将其更改为递归的: 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个参数,我不知道如何返回2个参数

这是正常的循环,
不是递归的
,但我不知道如何将其更改为
递归的

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);
函数顺序(num,num2){
//var tampung=1;

如果(num一个递归函数调用它自己,并且有一个额外的参数,我们就不需要跟踪一个变化的变量。循环和递归是非常密切的关系,以至于转换是机械的

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
的基值,则很常见的做法是创建一个帮助函数来编码该基值,然后启动递归。

您可以使用一个递归函数第三张支票

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

经验法则,对于乘法,返回最后一个值
1
,对于加法
0

函数deret2(num,num2){
返回num>=1?num*deret2(num-num2,num2):1;
}

console.log(deret2(12,5));//12*7*2=168
递归函数应该在函数内部声明自己,如果条件为:

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

返回哪里?既没有
Return
语句,也不是递归函数。是的,我想将其更改为递归,这是正常的循环,因此您需要一个返回
num*deret2(num-num2,num2)的函数
。别忘了你的基本情况…@Mike:for循环和递归不是一回事。那么你的递归函数怎么了?它不需要任何
tampung
的东西,但它应该能工作。你……总是有最好的解决方案!
:P
不确定询问递归是什么的人是否能理解短路?总之答案又好又短!该死,它与12*funct(7,2)一起工作…它是如何相乘的?为什么12不也相乘到第二个数字(,2)?我同意@Megajin的观点,虽然非常简洁,但它并不是OP最可读的形式。也许可以编辑更长的形式来更好地说明正在发生的事情?@NinaScholz哦,我明白了,错过了。谢谢。根本不需要额外的参数。如果你想要尾部递归,它是有的……但是你是对的,可以继续降序和mut正在应用
num*deret2(…)
function deret2(startNumber,step){
   if(startNumber>= 1){
     return startNumber * deret2(startNumber - step, step);
   }else{
     return 1;
   }
}
deret2(12,5); //12* 7 * 2 = 168