яндекс
  • 1
    Ввод и вывод данных
    • Задачи
  • 2
    Условия
    • Задачи
  • 3
    Цикл for
    • Задачи
  • 4
    Строки
    • Задачи
  • 5
    Цикл while
    • Задачи
  • 6
    Списки
    • Задачи
  • 7
    Двумерные массивы
    • Задачи
  • 8
    Словари
    • Задачи
  • 9
    Множества
    • Задачи
  • 10
    Функции и рекурсия
    • Задачи
  • к

Занятие 10. Функции и рекурсия

Задача «Возведение числа в степень»

Уровень сложности:

иконка человека красный иконка человека белая иконка человека зеленая Pythonlib
Напишите рекурсивную функцию power(base, exp), которая принимает основание и показатель степени и возвращает результат возведения числа в степень.
 
Пример:
Input:
            2 3
Output:
            8
 
Подсказка:
Рекурсия — это когда функция вызывает саму себя для решения задачи. Можно представить это как процесс решения проблемы путем её деления на меньшие части, пока не будет достигнуто самое простое состояние, которое легко решить.
 
Простой пример: Считаем до нуля
Представьте, что у вас есть задача считать от заданного числа до нуля. Например, если вы начнете с 3, то ваш результат будет: 3, 2, 1, 0.
 
Рекурсивная функция для счёта
def count_down(n):
    if n <= 0:
        print("0")
    else:
        print(n)
        count_down(n - 1)

count_down(3)
  1. Вызывается count_down(3).
  2. Поскольку 3 > 0, функция печатает 3 и вызывает count_down(2).
  3. Поскольку 2 > 0, функция печатает 2 и вызывает count_down(1).
  4. Поскольку 1 > 0, функция печатает 1 и вызывает count_down(0).
  5. Поскольку 0 <= 0, функция печатает 0 и больше не вызывает себя.
Вот и все! Мы достигли базового случая (когда n <= 0), и рекурсия закончилась.
 
Ещё пример: Факториал числа
Факториал числа n (обозначается как n!) — это произведение всех целых чисел от 1 до n. Например, 5!=5×4×3×2×1=120
 
Рекурсивная функция для вычисления факториала
def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n - 1)

print(factorial(5))  # Вывод: 120
  1. Вызывается factorial(5).
  2. Поскольку 5 != 0, функция возвращает 5 * factorial(4).
  3. factorial(4) возвращает 4 * factorial(3).
  4. factorial(3) возвращает 3 * factorial(2).
  5. factorial(2) возвращает 2 * factorial(1).
  6. factorial(1) возвращает 1 * factorial(0).
  7. factorial(0) возвращает 1, так как это базовый случай.
Теперь все возвращенные значения умножаются друг на друга, и мы получаем:
  • factorial(1) возвращает 1
  • factorial(2) возвращает 2 * 1 = 2
  • factorial(3) возвращает 3 * 2 = 6
  • factorial(4) возвращает 4 * 6 = 24
  • factorial(5) возвращает 5 * 24 = 120
 
Плюсы и минусы рекурсии
 
Плюсы:
Простота: Рекурсивные функции часто легче писать и читать для задач, которые естественным образом разбиваются на подзадачи.
Решение сложных задач: Рекурсия позволяет элегантно решать задачи, связанные с деревьями, графами и другими сложными структурами данных.
 
Минусы:
Производительность: Рекурсивные функции могут быть менее эффективными из-за накладных расходов на вызов функций и использования памяти в стеке вызовов.
Риск переполнения стека: Глубокая рекурсия может привести к переполнению стека вызовов, если базовый случай не достигается или если количество рекурсивных вызовов слишком велико.
 
Рекомендации по использованию рекурсии
Всегда определяйте базовый случай: Убедитесь, что у вас есть четкое условие завершения рекурсии.
Следите за глубиной рекурсии: Если ваша рекурсивная функция может вызывать себя очень много раз, рассмотрите возможность использования итеративного подхода.
Используйте мемоизацию: Для задач, где одно и то же значение вычисляется многократно (например, числа Фибоначчи), рассмотрите возможность использования мемоизации (кэширования результатов) для улучшения производительности.
Solution
Входные данные
Выходные данные

Тесты

2 3 6 1 1
2 3 6 1 1
2 3 6 1 1
2 3 6 1 1
2 3 6 1 1
2 3 6 1 1

🎉 Поздравляем! 🎉

Ты отлично справился с задачей! Это был непростой вызов, но ты нашёл правильное решение. Ты на шаг ближе к мастерству в программировании! Продолжай в том же духе, ведь каждый пройденный этап делает тебя ещё сильнее.

AD

Реклама

red-snake blue-snake green-snake

Запускаем ваш код...