Skip to content

Commit 51bc881

Browse files
authored
Create README.md
1 parent 297f338 commit 51bc881

1 file changed

Lines changed: 312 additions & 0 deletions

File tree

Lines changed: 312 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,312 @@
1+
# Рекурсия
2+
3+
```sql
4+
def factorial(x):
5+
print("x=" + str(x))
6+
if x == 1:
7+
return 1
8+
else:
9+
return factorial(x-1) * x
10+
11+
12+
print(factorial(3))
13+
```
14+
```sql
15+
drop table if exists employees;
16+
```
17+
```sql
18+
create table employees (
19+
employee_id serial primary key,
20+
full_name varchar not null,
21+
manager_id int
22+
);
23+
```
24+
```sql
25+
insert
26+
into
27+
employees (
28+
29+
employee_id,
30+
full_name,
31+
manager_id
32+
33+
)
34+
values
35+
36+
(1,
37+
'michael north',
38+
null),
39+
40+
(2,
41+
'megan berry',
42+
1),
43+
44+
(3,
45+
'sarah berry',
46+
1),
47+
48+
(4,
49+
'zoe black',
50+
1),
51+
52+
(5,
53+
'tim james',
54+
1),
55+
56+
(6,
57+
'bella tucker',
58+
2),
59+
60+
(7,
61+
'ryan metcalfe',
62+
2),
63+
64+
(8,
65+
'max mills',
66+
2),
67+
68+
(9,
69+
'benjamin glover',
70+
2),
71+
72+
(10,
73+
'carolyn henderson',
74+
3),
75+
76+
(11,
77+
'nicola kelly',
78+
3),
79+
80+
(12,
81+
'alexandra climo',
82+
3),
83+
84+
(13,
85+
'dominic king',
86+
3),
87+
88+
(14,
89+
'leonard gray',
90+
4),
91+
92+
(15,
93+
'eric rampling',
94+
4),
95+
96+
(16,
97+
'piers paige',
98+
7),
99+
100+
(17,
101+
'ryan henderson',
102+
7),
103+
104+
(18,
105+
'frank tucker',
106+
8),
107+
108+
(19,
109+
'nathan ferguson',
110+
8),
111+
112+
(20,
113+
'kevin rampling',
114+
8);
115+
116+
```
117+
```sql
118+
select
119+
*
120+
from
121+
employees;
122+
```
123+
```sql
124+
with recursive subordinates as (
125+
select
126+
e.employee_id,
127+
e.full_name
128+
from
129+
employees e
130+
where
131+
e.employee_id = 2
132+
union
133+
select
134+
e.employee_id,
135+
e.full_name
136+
from
137+
subordinates s
138+
join employees e
139+
140+
on
141+
s.employee_id = e.manager_id
142+
)
143+
select
144+
*
145+
from
146+
subordinates;
147+
```
148+
```sql
149+
with recursive managers as (
150+
select
151+
e.employee_id,
152+
e.full_name,
153+
e.manager_id
154+
from
155+
employees e
156+
where
157+
e.employee_id = 18
158+
union all
159+
select
160+
e.employee_id,
161+
e.full_name,
162+
e.manager_id
163+
from
164+
managers m
165+
join employees e
166+
167+
on
168+
e.employee_id = m.manager_id
169+
)
170+
select
171+
*
172+
from
173+
managers;
174+
```
175+
```sql
176+
- 1 этап
177+
```
178+
```sql
179+
select
180+
e.employee_id,
181+
e.full_name,
182+
e.manager_id
183+
from
184+
employees e
185+
where
186+
e.employee_id = 18;
187+
```
188+
- Результат выполнения запроса
189+
- 18 frank tucker 8
190+
- общий результат выполнения cte
191+
- 18 frank tucker 8
192+
- содержимое managers
193+
- 18 frank tucker 8
194+
- 2 этап
195+
```sql
196+
select
197+
e.employee_id,
198+
e.full_name,
199+
e.manager_id
200+
from
201+
managers m
202+
join employees e
203+
on
204+
e.employee_id = m.manager_id;
205+
```
206+
- результат выполнения запроса
207+
- 8 max mills 2
208+
- общий результат выполнения cte
209+
- 18 frank tucker 8
210+
- 8 max mills 2
211+
- содержимое managers
212+
- 8 max mills 2
213+
- 3 этап
214+
215+
```sql
216+
select
217+
e.employee_id,
218+
e.full_name,
219+
e.manager_id
220+
from
221+
managers m
222+
join employees e
223+
on
224+
e.employee_id = m.manager_id;
225+
```
226+
- результат выполнения запроса
227+
- 2 megan berry 1
228+
- общий результат выполнения cte
229+
- 18 frank tucker 8
230+
- 8 max mills 2
231+
- 2 megan berry 1
232+
- содержимое managers
233+
- 2 megan berry 1
234+
- 4 этап
235+
```sql
236+
select
237+
e.employee_id,
238+
e.full_name,
239+
e.manager_id
240+
from
241+
managers m
242+
join employees e
243+
on
244+
e.employee_id = m.manager_id;
245+
```
246+
- результат выполнения запроса
247+
- 1 michael north
248+
- общий результат выполнения cte
249+
- 18 frank tucker 8
250+
- 8 max mills 2
251+
- 2 megan berry 1
252+
- 1 michael north
253+
- содержимое managers
254+
- 1 michael north
255+
- 5 этап
256+
```sql
257+
select
258+
e.employee_id,
259+
e.full_name,
260+
e.manager_id
261+
from
262+
managers m
263+
join employees e
264+
on
265+
e.employee_id = m.manager_id;
266+
```
267+
- результат выполнения запроса
268+
- общий результат выполнения cte
269+
- 18 frank tucker 8
270+
- 8 max mills 2
271+
- 2 megan berry 1
272+
- 1 michael north
273+
```sql
274+
with recursive factorial as (
275+
select
276+
1 as n,
277+
1 as res
278+
union
279+
select
280+
f.n + 1 as n,
281+
f.res * (f.n + 1) as res
282+
from
283+
factorial f
284+
where
285+
f.n + 1 <= 5
286+
)
287+
select
288+
*
289+
from
290+
factorial;
291+
```
292+
```sql
293+
with recursive factorial as (
294+
select
295+
5 as n,
296+
5 as res
297+
union
298+
select
299+
f.n - 1 as n,
300+
f.res * (f.n - 1) as res
301+
from
302+
factorial f
303+
where
304+
f.n - 1 >= 1
305+
)
306+
select
307+
*
308+
from
309+
factorial
310+
where
311+
n = 1;
312+
```

0 commit comments

Comments
 (0)