single
Рекурсія
Свайпніть щоб показати меню
Рекурсивна функція — це функція, яка викликає саму себе для розв'язання задачі шляхом поділу її на менші, простіші частини.
Ключові елементи рекурсії:
- Базовий випадок: умова, яка зупиняє рекурсію;
- Рекурсивний випадок: частина, де функція викликає саму себе з простішим вхідним значенням.
Чому використовують рекурсію?
Деякі задачі природно виражаються у вигляді менших підзадач. Рекурсія забезпечує зрозумілий і елегантний спосіб розв'язання таких задач шляхом виклику функцією самої себе для обробки простіших випадків. Зазвичай використовується для обробки дерев, пошуку шляхів або розбиття структур (наприклад, списків, рядків).
Простий приклад
123456def print_message(message, times): if times > 0: # Base case: stop when times is 0 print(message) print_message(message, times - 1) # Recursive case print_message('Hello, Recursion!', 3)
Розгляньте покроково, як це працює:
times = 3→ умова істинна, виводиться повідомлення, викликаєтьсяprint_message(message, 2);times = 2→ умова істинна, виводиться повідомлення, викликаєтьсяprint_message(message, 1);times = 1→ умова істинна, виводиться повідомлення, викликаєтьсяprint_message(message, 0);times = 0→ умова хибна, рекурсія зупиняється.
Результат: повідомлення буде виведено три рази.
Стек викликів
Кожного разу, коли функція викликає саму себе, до стека викликів додається новий фрейм — структура пам'яті, яка відстежує активні виклики функцій. Коли досягається базовий випадок, кожен попередній виклик завершується один за одним у зворотному порядку.
Кожна рекурсивна функція повинна мати базовий випадок. Без нього функція буде викликати саму себе нескінченно й призведе до RecursionError.
Проведіть, щоб почати кодувати
Реалізуйте рекурсивну функцію list_sum, яка обчислює суму всіх елементів у списку.
- Якщо список
numbersпорожній, поверніть0— це базовий випадок; - В іншому випадку відокремте перший елемент від решти. Поверніть суму першого елемента (
numbers[0]) та результату повторного викликуlist_sum()з рештою списку (numbers[1:]).
Рішення
Дякуємо за ваш відгук!
single
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат