Javascript递归向前和向后计数

Javascript递归向前和向后计数,javascript,recursion,Javascript,Recursion,我试图通过编写递归计数函数来理解递归。函数的一种变化是向前计数,另一种是向后计数。我理解向后的,但不理解向前的,因为只要改变else块中语句的顺序,我就可以向前计数 function countforward(num) { if (num == 0) { return 0; } else if (num == 1) { return console.log(1); } else { countforward(

我试图通过编写递归计数函数来理解递归。函数的一种变化是向前计数,另一种是向后计数。我理解向后的,但不理解向前的,因为只要改变else块中语句的顺序,我就可以向前计数

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块时,数字都会显示出来,并且会减少并再次调用,但我没有得到前进函数。假设我们写下了每个函数的功能描述:

  • countforward(n)
    按升序打印从1到n的值
  • countbackward(n)
    按降序打印从n到1的值
将这些描述放在相应的递归调用中,我们得到:

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
}