1 00:00:00,000 --> 00:00:00,000 Hello team! 2 00:00:00,000 --> 00:00:04,000 In this lesson we will learn what are recursive methods and how to use them. 3 00:00:04,000 --> 00:00:06,000 What is recursion? 4 00:00:06,000 --> 00:00:10,000 Recursion is a process in which a method calls itself continuously. 5 00:00:11,000 --> 00:00:15,000 A method in Java that calls itself is called recursive method. 6 00:00:15,000 --> 00:00:17,000 Let's write the easiest recursive method. 7 00:00:18,000 --> 00:00:24,000 I have the method which calls itself, and when it calls itself, it calls the same method again. 8 00:00:24,000 --> 00:00:26,000 This is recursive method. 9 00:00:26,000 --> 00:00:27,000 What is wrong here? 10 00:00:28,000 --> 00:00:29,000 Let's run our program. 11 00:00:31,000 --> 00:00:33,000 We have stack overflow error. 12 00:00:33,000 --> 00:00:35,000 Why this has happened? 13 00:00:35,000 --> 00:00:40,000 Because when a recursive call is made, new storage locations for variables are located in the stack 14 00:00:40,000 --> 00:00:41,000 memory of the JVM. 15 00:00:42,000 --> 00:00:46,000 So each recursive call will add a new frame to the stack. 16 00:00:46,000 --> 00:00:53,000 That means we can run out of memory, because information about initial and other method invocations 17 00:00:53,000 --> 00:00:54,000 won't be removed from the stack. 18 00:00:55,000 --> 00:00:58,000 We need to finish method to release memory in stack. 19 00:00:58,000 --> 00:01:03,000 But when we call the same method again and again, it just can't be completed. 20 00:01:04,000 --> 00:01:07,000 So here is an important rule which you have to always keep in mind. 21 00:01:07,000 --> 00:01:12,000 When you create recursive methods, you should clearly define stop condition. 22 00:01:12,000 --> 00:01:17,000 The condition when recursion must be stopped and value should be returned. 23 00:01:17,000 --> 00:01:20,000 Let's find factorial of a number. 24 00:01:20,000 --> 00:01:26,000 Factorial of a positive integer is a result of multiplication Application of all positive integers less 25 00:01:26,000 --> 00:01:28,000 than or equal to original number. 26 00:01:28,000 --> 00:01:33,000 We'll write recursive method in case I is not equal to zero. 27 00:01:33,000 --> 00:01:39,000 Then we can multiply I by the result of the same method, but with number decreased by one, and when 28 00:01:39,000 --> 00:01:45,000 I will be equal to zero, we return one and no recursion here anymore. 29 00:01:45,000 --> 00:01:47,000 We broke the chain of recursion calls. 30 00:01:48,000 --> 00:01:50,000 Let me comment this method first. 31 00:01:50,000 --> 00:01:54,000 Now I can run the program again and you see the result in console. 32 00:01:54,000 --> 00:01:58,000 Here we calculated factorial of three and four. 33 00:01:58,000 --> 00:02:02,000 Now when you know how recursive method works, let's recap. 34 00:02:02,000 --> 00:02:04,000 Pros and cons of recursive methods. 35 00:02:04,000 --> 00:02:08,000 Recursive methods usually look clean and easy to understand. 36 00:02:08,000 --> 00:02:11,000 Often we can achieve our goal without recursive methods. 37 00:02:12,000 --> 00:02:17,000 For example, here is the same method to calculate factorial but without recursion, and you see that 38 00:02:17,000 --> 00:02:20,000 it is a bit longer and less clear than recursive one. 39 00:02:21,000 --> 00:02:27,000 So clean design is an advantage of recursive methods, but recursive methods have one huge drawback. 40 00:02:28,000 --> 00:02:33,000 In case there will be a lot of methods, invocations or stop condition will be written incorrectly. 41 00:02:33,000 --> 00:02:36,000 Your program will be stopped because of stack overflow error. 42 00:02:37,000 --> 00:02:39,000 Now you know pros and cons of recursive methods. 43 00:02:40,000 --> 00:02:43,000 I will share with you coding exercises to write recursive methods. 44 00:02:44,000 --> 00:02:45,000 Thanks a lot for your attention. 45 00:02:45,000 --> 00:02:47,000 See you in the next lesson. 46 00:02:48,000 --> 00:02:48,000 Your.