Home > Article > Web Front-end > Recursive implementation method in JS
This time I bring to you, what are the precautions, the following is a practical case, let's take a look.
Recursive function: A recursive function is formed by calling itself by name.
Recursively implement the factorial function:
Method 1: Use the name of the function through
function factorial(num){ if(num<=1){ return 1; }else{ return num*factorial(num-1); } } console.log(factorial(4));
The result is: 24;
However, there is a problem with this method of implementing recursion. Observe the following code:
function factorial(num){ if(num<=1){ return 1; }else{ return num*factorial(num-1); } } var anthorFactorial=factorial; console.log(anthorFactorial(4));
The result is: 24;
But:
function factorial(num){ if(num<=1){ return 1; }else{ return num*factorial(num-1); } } var anthorFactorial=factorial; factorial=null; console.log(anthorFactorial(4));
The result is: error
This is because:
The function name we defined is actually a pointer to the function, and the anotherFactorial we defined also points to that function, so calling anotherFactorial (4) can successfully output 24
When factorial = null, the reference of executing define function is left with anotherFactorial, then the above error message will be displayed when calling anotherFactorial(4).
At this time, arguments.callee can be used to replace factorial in the function definition.
Method 2: By using arguments.callee
function factorial(num){ if(num<=1){ return 1; }else{ return num*arguments.callee(num-1); } } var anthorFactorial=factorial; factorial=null; console.log(anthorFactorial(4));
The result is: 24
arguments.callee is a pointer to the function being executed, so arguments.callee can be used to implement recursive calls to the function. By using arguments.callee instead of the function name, you can ensure that no problem will occur when calling the function. Therefore, when writing recursive functions, it is always safer to use arguments.callee than using function names.
However, in strict mode, arguments.callee cannot be accessed through scripts, and an error will be reported when accessing this property. However, the same effect can be achieved by naming function expressions.
Method 3: Expression through named function
var factorial=function f(num){ if(num<=1){ return 1; }else{ return num*f(num-1); } }; f=null; console.log(factorial(4));
This approach works in both strict and non-strict modes.
I believe you have mastered the method after reading the case in this article. For more exciting information, please pay attention to other related articles on the php Chinese website!
Recommended reading:
The above is the detailed content of Recursive implementation method in JS. For more information, please follow other related articles on the PHP Chinese website!