File size: 4,117 Bytes
33852e5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
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.