Try   HackMD

Практика по теме 7. Функции и рекурсия

На сайте http://pythontutor.ru/lessons/functions/problems/length_of_segment/ решить все задачи к занятию 8. Функции и рекурсия

Выслать архив с решениями всех задач (файлы с расширением .py) и скриншотом с сайта, на котором видно количество решенных задач и имя текущего пользователя.

Задача 1. Список квадратов

Даны четыре действительных числа:

x1,y1,x2,y2. Напишите функцию distance(x1, y1, x2, y2), вычисляющая расстояние между точкой
(x1,y1)
и
(x2,y2)
. Считайте четыре действительных числа и выведите результат работы этой функции.

Если вы не знаете, как решить эту задачу, то вы, возможно, не изучали в школе теорему Пифагора. Попробуйте прочитать о ней на Википедии.

Решение
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. Отрицательная степень

Дано действительное положительное число

a и целоe число
n
.

Вычислите

an. Решение оформите в виде функции power(a, n).

Стандартной функцией возведения в степень пользоваться нельзя.

Решение
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. Отрицательная степень

Напишите функцию capitalize(), которая принимает слово из маленьких латинских букв и возвращает его же, меняя первую букву на большую.

Например, print(capitalize('word')) должно печатать слово Word.

На вход подаётся строка, состоящая из слов, разделённых одним пробелом. Слова состоят из маленьких латинских букв. Напечатайте исходную строку, сделав так, чтобы каждое слово начиналось с большой буквы. При этом используйте вашу функцию capitalize().

Напомним, что в Питоне есть функция ord(), которая по символу возвращает его код в таблице ASCII, и функция chr(), которая по коду символа возвращает сам символ. Например, ord('a') == 97, chr(97) == 'a'.

Решение
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. Возведение в степень

Дано действительное положительное число

a и целое неотрицательное число
n
. Вычислите
an
не используя циклы, возведение в степень через ** и функцию math.pow(), а используя рекуррентное соотношение
an=aan1
.

Решение оформите в виде функции power(a, n).

Решение
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. Разворот последовательности

Дана последовательность целых чисел, заканчивающаяся числом 0. Выведите эту последовательность в обратном порядке.

При решении этой задачи нельзя пользоваться массивами и прочими динамическими структурами данных. Рекурсия вам поможет.

Решение
def input_number():
    n = int(input())
    if n != 0:
        input_number()
    print(n)
    
input_number()

Задача 6. Числа Фибоначчи

Напишите функцию fib(n), которая по данному целому неотрицательному n возвращает n-e число Фибоначчи. В этой задаче нельзя использовать циклы — используйте рекурсию.

Решение
def fib(n):
    if n <= 1:
        return n
    else:
        return fib(n - 1) + fib(n - 2)

print(fib(int(input())))