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