Factorial Code works but why

别来无恙 提交于 2019-12-20 07:48:01

问题


I'm solving a factorial problem where the function takes a number and returns the factorial of that number.

The problem I'm running into is that the code works but I don't know why. There are no loops to call it back after the code is executed and I'm not even sure where the current value is being stored.If I am correct the I assume the function is re-running every time it hit the return and it is running with a value of n-1 so one number less than the previous time it ran, however, I still do not see how the value is getting stored to multiple each number by the current value. Even if I log the current value of n after every run all I get is the numbers 10 down to one. I would think the current value would change to the multiplied value.

Again this code works perfectly I just need to understand why.

function factorial(n) {
    if (n === 0) {
        return 1;
    }
    console.log(n);
    return n * factorial(n - 1);
}

factorial(10);

回答1:


What you have here is a recursive function - a function which calls itself. You also need to keep in mind the "scope" of the variables in the function.

The scope of the parameter "n" is local to the function. Every time the function is called, the new variable is created. The scope of each variable is the function execution.

1: function factorial(n) {
2:     if (n === 0) {
3:         return 1;
4:     }
5:     console.log(n);
6:     return n * factorial(n - 1);
7: }

Example:

Parameter Value = 0
Hence, n = 0
Execute factorial(0)
1. line 1: variable n = 0
2. line 2: check if n = 0
3. line 3: return 1

Example:

Parameter Value = 2
Hence, n = 2
Execute factorial(2)
1. line 1: variable n = 2 (scope = execution #A)
2. line 5: console log n = 2
3. line 6: return 2 * factorial(2-1) // Function calls itself
    4. line 1: variable n = 1 (scope = execution #B)
    5. line 5: console log n = 1
    6. line 6: return 1 * factorial(1-1) // Function calls itself
        7. line 1: variable n = 0 (scope = execution #C)
        8. line 3: return 1 // #C returns 1
    9. return 1 * 1 // #B returns 1 * 1 (from #C)
10. return 2 * 1 // #A returns 2 * 1 (from #B)


来源:https://stackoverflow.com/questions/42770052/factorial-code-works-but-why

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!