--- 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()))) ``` :::