---
tags: Python Step
---
# Практика по теме 7. Функции и рекурсия
На сайте http://pythontutor.ru/lessons/functions/problems/length_of_segment/ решить все задачи к занятию *8. Функции и рекурсия*
Выслать *архив с решениями всех задач (файлы с расширением .py) и скриншотом с сайта*, на котором видно количество решенных задач и имя текущего пользователя.
## [Задача 1. Список квадратов](http://pythontutor.ru/lessons/while/problems/list_of_squares/)
Даны четыре действительных числа: $x_1, y_1, x_2, y_2$. Напишите функцию `distance(x1, y1, x2, y2)`, вычисляющая расстояние между точкой $(x_1,y_1)$ и $(x_2,y_2)$. Считайте четыре действительных числа и выведите результат работы этой функции.
Если вы не знаете, как решить эту задачу, то вы, возможно, не изучали в школе теорему Пифагора. Попробуйте прочитать о ней [на Википедии](https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9F%D0%B8%D1%84%D0%B0%D0%B3%D0%BE%D1%80%D0%B0#.D0.A4.D0.BE.D1.80.D0.BC.D1.83.D0.BB.D0.B8.D1.80.D0.BE.D0.B2.D0.BA.D0.B8).
:::spoiler Решение
``` python
import math
def distance(x1, y1, x2, y2):
return math.sqrt((x1-x2)**2 + (y1-y2)**2)
x1 = float(input())
y1 = float(input())
x2 = float(input())
y2 = float(input())
print(distance(x1, y1, x2, y2))
```
:::
## [Задача 2. Отрицательная степень](http://pythontutor.ru/lessons/functions/problems/negative_power/)
Дано действительное положительное число $a$ и **целоe** число $n$.
Вычислите $a^n$. Решение оформите в виде функции `power(a, n)`.
Стандартной функцией возведения в степень пользоваться нельзя.
:::spoiler Решение
``` python
def power(a, n):
if n == 0:
return 1
else:
if n < 0:
return 1 / power(a, -n)
else:
return a * power(a, n - 1)
a = float(input())
n = int(input())
print(power(a, n))
```
:::
## [Задача 3. Отрицательная степень](http://pythontutor.ru/lessons/functions/problems/capitalize/)
Напишите функцию `capitalize()`, которая принимает слово из маленьких латинских букв и возвращает его же, меняя первую букву на большую.
Например, `print(capitalize('word'))` должно печатать слово Word.
На вход подаётся строка, состоящая из слов, разделённых одним пробелом. Слова состоят из маленьких латинских букв. Напечатайте исходную строку, сделав так, чтобы каждое слово начиналось с большой буквы. При этом используйте вашу функцию `capitalize()`.
Напомним, что в Питоне есть функция `ord()`, которая по символу возвращает его код [в таблице ASCII](https://ru.wikipedia.org/wiki/ASCII), и функция `chr()`, которая по коду символа возвращает сам символ. Например, `ord('a') == 97`, `chr(97) == 'a'`.
:::spoiler Решение
``` python
def capitalize(word):
first_letter = chr(ord(word[0]) - (ord('a') - ord('A')))
return first_letter + word[1:]
for word in input().split():
print(capitalize(word), end = " ")
```
:::
## [Задача 4. Возведение в степень](http://pythontutor.ru/lessons/functions/problems/power_rec/)
Дано действительное положительное число $a$ и целое неотрицательное число $n$. Вычислите $a^n$ не используя циклы, возведение в степень через `**` и функцию `math.pow()`, а используя рекуррентное соотношение $a^n=a \cdot a^{n-1}$.
Решение оформите в виде функции `power(a, n)`.
:::spoiler Решение
``` python
def power(a, n):
if n == 0:
return 1
else:
return a * power(a, n - 1)
a = float(input())
n = int(input())
print(power(a, n))
```
:::
## [Задача 5. Разворот последовательности](http://pythontutor.ru/lessons/functions/problems/reverse_rec/)
Дана последовательность целых чисел, заканчивающаяся числом 0. Выведите эту последовательность в обратном порядке.
При решении этой задачи нельзя пользоваться массивами и прочими динамическими структурами данных. Рекурсия вам поможет.
:::spoiler Решение
``` python
def input_number():
n = int(input())
if n != 0:
input_number()
print(n)
input_number()
```
:::
## [Задача 6. Числа Фибоначчи](http://pythontutor.ru/lessons/functions/problems/fibonacci_rec/)
Напишите функцию `fib(n)`, которая по данному целому неотрицательному _n_ возвращает _n_-e число Фибоначчи. В этой задаче нельзя использовать циклы — используйте рекурсию.
:::spoiler Решение
``` python
def fib(n):
if n <= 1:
return n
else:
return fib(n - 1) + fib(n - 2)
print(fib(int(input())))
```
:::