Home > Article > Web Front-end > Detailed understanding of recursive functions in JavaScript and sharing of sample code
The following editor will bring you a detailed understanding and practical examples (recommended) based on JS recursive functions. The editor thinks it’s pretty good, so I’ll share it with you now and give it as a reference. Let’s follow the editor and take a look.
The programming technique in which a program calls itself is called recursion.
A process or function directly or indirectly calls itself a method in its definition or description. It usually transforms a large and complex problem into a method similar to the original problem. To solve smaller-scale problems, the recursive strategy can describe the multiple repeated calculations required in the problem-solving process with only a small number of programs, greatly reducing the amount of program code. The power of recursion lies in defining infinite sets of objects with finite statements. Programs written using recursive thinking are often very concise and easy to understand.
Generally speaking, recursion requires boundary conditions, a recursive forward section and a recursive return section. When the boundary conditions are not met, the recursion advances; when the boundary conditions are met, the recursion returns.
Note:
(1) Recursion is calling itself in a procedure or function;
(2) When using When using the incremental recursion strategy, there must be a clear recursion end condition, called the recursion exit, otherwise it will continue indefinitely (deadlock).
Recursive algorithms are generally used to solve three types of problems:
(1) The definition of data is recursively defined. (Fibonacci function)
(2) The problem solution is implemented according to the recursive algorithm. (Traceback)
(3) The structural form of data is defined recursively. (Tree traversal, graph search)
Disadvantages of recursion:
The recursive algorithm has low efficiency in solving problems. During the recursive call process, the system opens a stack to store the return points, local quantities, etc. of each layer. Too many recursions can easily cause stack overflow, etc.
Interesting examples of recursive functions:
1. Classical problem - there are a pair of rabbits, every month from the 3rd month after birth Each rabbit will give birth to a pair of rabbits. After the rabbit reaches the third month, another pair of rabbits will be born every month. If the rabbits do not die, what is the total number of rabbits in each month of the third year? (Hint: The pattern of rabbits is the sequence 1,1,2,3,5,8,13,21....)
class Program { static void Main(string[] args) { Program p = new Program(); Console.WriteLine(p.tuzi(7)); } public int tuzi(int n) { if (n == 1 || n == 2) { return 1; } else { return tuzi(n - 1) + tuzi(n - 2); } } }
2. Interesting question—— age. There are 5 people sitting together and ask how old the fifth person is? He said he was 2 years older than the 4th person. When asked how old the 4th person was, he said he was 2 years older than the 3rd person. I asked the third person and he said he was two years older than the second person. Asked the second person and said he was two years older than the first person. Finally I asked the first person and he said he was 10 years old. How old is the fifth person? Implemented using a recursive algorithm.
class Program { static void Main(string[] args) { Program p = new Program(); Console.WriteLine( p.age(5)); } /// <summary> /// 递归法求岁数 /// </summary> /// <param name="n">有几个人</param> /// <returns></returns> int age(int n) { int c; if(n==1) return 10; else { c = age(n-1)+2; return c; } }
3. Interesting question - monkey eats peaches. There are a bunch of peaches on the beach, and five monkeys come to divide them. The first monkey divided the pile of peaches into five parts. If there was one more, the monkey threw the extra one into the sea and took away one part. The second monkey divided the remaining peach into five equal parts, and there was one more. It also threw the extra peach into the sea and took one. The third, fourth, and fifth monkeys all did the same. Yes, how many peaches were there on the beach?
Code:
class Program { static void Main(string[] args) { Program p = new Program(); Console.WriteLine( p.PeachNumber(5)); } /// <summary> /// 递归法求桃子数 /// </summary> /// <param name="n"></param> /// <returns></returns> int PeachNumber(int n) { if (n == 1) { //最后一个是至少是六个 return 6; } else { return (PeachNumber(n - 1) + 1) * 5; } }
The above is the detailed content of Detailed understanding of recursive functions in JavaScript and sharing of sample code. For more information, please follow other related articles on the PHP Chinese website!