Функции и рекурсия: прокачка кода через игру
Представь, что ты пишешь код для своей любимой игры. Каждая функция — это как спецприём персонажа: вызываешь — и он делает что-то крутое. А рекурсия — это когда приём вызывает сам себя, как бесконечный цикл в мультике про Скуби-Ду, только с выходом.
Функции и рекурсия — база, без которой не обойтись на ЕГЭ и в реальном коде. Но зубрить скучно. Поэтому мы превратили это в игру: XP, уровни, стрики, баттлы с друзьями и персонажи, которые объяснят тему так, что ты сам захочешь решать задачи.
Выбирай наставника, открывай тетрадь (конспект) и начинай прокачку. Первый урок — бесплатно, без карты.
Без карты, без кредитки. Выбери персонажа — учи голосом, побеждай в баттлах.
Что такое функции и рекурсия на пальцах
Функция — это как рецепт пиццы. Ты даёшь ингредиенты (параметры), выполняешь шаги (код), получаешь пиццу (результат). В коде: def make_pizza(toppings): ... return pizza.
Рекурсия — это когда функция вызывает саму себя, но с меньшими данными. Как матрёшка: большая кукла открывается, внутри поменьше, и так до самой маленькой. Пример: посчитать факториал 5! = 5 * 4! — здесь факториал вызывает сам себя с числом на 1 меньше, пока не дойдёт до 1 (базовый случай).
Важно помнить: у рекурсии должен быть выход (базовый случай), иначе программа зависнет. Это как зацикленный сон — если не проснуться, будильник не остановить.
Напиши функцию, которая принимает число n и возвращает сумму чисел от 1 до n (без цикла, через рекурсию).
def sum_recursive(n):
if n == 0:
return 0
else:
return n + sum_recursive(n-1)
# Вызов: sum_recursive(5) вернёт 15
Выбери своего учителя
Каждый персонаж объясняет тему по-своему. Выбери того, кто тебе ближе:
Барсик-кот: "Мур, функции — это как команды для мышки. Определил def — и кот бежит. Рекурсия — когда кот гонится за своим хвостом, но вовремя останавливается. Мур-мур, попробуй."
Йорик-магистр: "Приветствую, путник. Функция — это заклинание из свитка. def — произносишь имя, передаёшь ману (параметры), получаешь эффект. Рекурсия — заклинание, которое вызывает само себя, пока не сработает контрзаклинание (базовый случай). Да будет код."
Аугмент-3000: "Бип-буп. Функция — модуль программы. Рекурсия — алгоритм с самовызовом. Рекомендую: базовый случай обязателен. Иначе stack overflow. Вычисляю оптимальный путь обучения... Готов."
Тренер 90-х: "Слушай сюда! Функция — это упражнение: принял параметры, сделал подход, вернул результат. Рекурсия — отжимания до отказа, но с выходом по счётчику. Не сдавайся, жми код!"
Бабушка Зинаида: "Ой, внучок, функция — это пирожки: начинку кладёшь (параметры), печёшь (тело), достаёшь (return). Рекурсия — когда пирожок внутри пирожка, как в матрёшке. Главное — не перепеки, а то зависнет."
Баттлы с друзьями
Хочешь проверить, кто круче знает функции? Запускай баттл! Ты получаешь 5 вопросов по теме, таймер на каждый — 30 секунд. После ответов система генерирует ссылку, кидаешь другу. Он отвечает на те же вопросы, и мы сравниваем: кто точнее и быстрее. Победитель получает +100 XP и место в недельном рейтинге.
Баттлы доступны даже на бесплатном тарифе. Можно играть с одноклассниками или случайными соперниками. Рейтинг обновляется каждую неделю — топ-10 получают бонусные ачивки.
Пример вопроса: "Что вернёт вызов функции def f(x): return x*2 при x=5?" Варианты: 5, 10, 25, ошибка. Угадал? Молодец, XP твои!
Не пропускай — стрик сгорит
Каждый день мы даём челлендж на +50 XP. Заходишь, решаешь одну задачку за 2 минуты — и стрик растёт. Если пропустил день — стрик обнуляется, рейтинг падает. Это как в игре: не зашёл — потерял прогресс. Но не переживай: можно восстановить, купив «защиту стрика» за 200 XP из магазина ачивок.
Пример дневного челленджа: "Напиши функцию, которая принимает список чисел и возвращает их сумму. Используй рекурсию." Решил за минуту? +50 XP. Лёгкая победа.
Мини-задача для разминки
Попробуй решить за 2 минуты. Не бойся ошибиться — в тетради можно подсмотреть.
Задача: Напиши функцию greet, которая принимает имя (строку) и возвращает приветствие вида "Привет, {name}!". Вызови её с твоим именем.
Решение:
def greet(name):
return f"Привет, {name}!"
print(greet("Антон")) # Выведет: Привет, Антон!
Всё просто: def — объявление, name — параметр, return — результат. Теперь ты можешь вызывать greet с любым именем.
Частые вопросы
Без карты, без кредитки. Выбери персонажа — учи голосом, побеждай в баттлах.