Home  >  Article  >  Web Front-end  >  Recursive implementation method in JS

Recursive implementation method in JS

php中世界最好的语言
php中世界最好的语言Original
2018-04-18 09:07:402840browse

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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn