你好,我的学习是递归的,但我不知道要解决这个问题, 因为这个参数使用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
编辑:我做的递归:
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)
??这就是为什么我不知道如何使用2个参数进行递归,你怎么能保存并将它与2个参数相乘?
答案 0 :(得分: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
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
答案 1 :(得分:3)
递归函数应该在函数内部声明,并且在条件:
时停止function deret2(startNumber,step){
if(startNumber>= 1){
return startNumber * deret2(startNumber - step, step);
}else{
return 1;
}
}
deret2(12,5); //12* 7 * 2 = 168
答案 2 :(得分:2)
递归函数调用自身,并且使用额外的参数,我们不需要跟踪变异变量。循环和递归是非常密切相关的,转换是机械的。
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
的基值,那么制作一个辅助函数来编码该基本情况然后开始递归是相当常见的。