Javascript递归向前和向后计数
我试图通过编写递归计数函数来理解递归。函数的一种变化是向前计数,另一种是向后计数。我理解向后的,但不理解向前的,因为只要改变else块中语句的顺序,我就可以向前计数Javascript递归向前和向后计数,javascript,recursion,Javascript,Recursion,我试图通过编写递归计数函数来理解递归。函数的一种变化是向前计数,另一种是向后计数。我理解向后的,但不理解向前的,因为只要改变else块中语句的顺序,我就可以向前计数 function countforward(num) { if (num == 0) { return 0; } else if (num == 1) { return console.log(1); } else { countforward(
function countforward(num) {
if (num == 0) {
return 0;
}
else if (num == 1) {
return console.log(1);
}
else {
countforward(num - 1);
console.log(num);
}
}
function countbackward(num) {
if (num == 0) {
return 0;
}
else if (num == 1) {
return console.log(1);
}
else {
console.log(num);
countbackward(num - 1);
}
}
后退函数对我来说很清楚,因为每次控件首先点击else块时,数字都会显示出来,并且会减少并再次调用,但我没有得到前进函数。假设我们写下了每个函数的功能描述:
按升序打印从1到n的值countforward(n)
按降序打印从n到1的值countbackward(n)
else {
countforward(n-1); // prints the values from 1 to n-1 in ascending order
console.log(n); // prints n
}
及
这(希望)让事情变得更清楚。缩进越多,性能越差…这段代码实际上不起作用,因为没有定义
count
。递归在哪里?没有函数在调用自己。他们正在调用未定义的count()
代码>应该是返回计数(num-1)代码>@Nina Scholz我们为什么要在这里谈论缩进?当然,我编辑了我的代码,(这是一个打字错误),但我很难理解forward函数,因为当我用countforward(3)调用它时,控件会点击else块,第一条语句会将其缩减为countforward(2)下面的console.log语句应该打印n值,即3,但是我得到1 countfoward(3)prints 1,2,3 by(调用countforward(2)prints 1,2 by(调用countforward(1)prints 1,然后prints 2),然后prints 3)。谢谢。我现在明白了
else {
console.log(n); // prints n
countbackward(n-1); // prints the values from n-1 to 1 in descending order
}