Рекурсія
Рекурсія — це програмна техніка, коли функція викликає саму себе, щоб розв’язати задачу, розбиваючи її на менші частини. Особливо корисна для задач із повторюваною структурою або природними підзадачами.
Ключові елементи рекурсії:
Базовий випадок: умова, яка зупиняє рекурсію;
Рекурсивний випадок: частина, де функція викликає саму себе з простішим вхідним значенням.
Навіщо використовувати рекурсію?
Деякі задачі природно виражаються через менші підзадачі. Рекурсія забезпечує зрозумілий і елегантний спосіб їх розв’язання, коли функція викликає саму себе для обробки простіших випадків. Зазвичай використовується для обробки дерев, пошуку шляхів або розбиття структур (наприклад, списків, рядків).
def print_message(message, times): if times > 0: # Base case: stop when times is 0 print(message) print_message(message, times - 1) # Recursive case # Function call print_message("Hello, Recursion!", 3)
Розглянемо крок за кроком, як працює ця рекурсивна програма:
Перевірка умови: якщо
times > 0
, функція продовжує виконання. У цьому випадкуtimes = 3
, тому умова істинна;Виведення повідомлення: функція виводить
"Hello, Recursion!"
;Рекурсивний виклик: функція викликає саму себе з
times - 1
;Повторення: цей процес триває, поки
times
не стане рівним 0;Завершення: коли умова
times > 0
більше не виконується, рекурсія зупиняється, і програма завершується.
Результат: повідомлення "Hello, Recursion!"
буде виведено три рази.
Розуміння процесу виконання:
Кожного разу, коли функція викликає саму себе, до стека викликів (структура пам'яті, яка відстежує активні виклики функцій) додається новий фрейм. Функція продовжує викликати саму себе зі зменшеним значенням times
. Коли досягається базовий випадок (times == 0
), виконання зупиняється. Потім кожен попередній виклик завершується один за одним у зворотному порядку. Така поведінка зворотного проходження є ключовою для роботи рекурсії.
Swipe to start coding
Дано рядок, що представляє номер телефону, який може містити пробіли, дефіси, дужки або інші нечислові символи. Мета — виділити лише цифри за допомогою рекурсії.
- Якщо вхідний рядок
number
порожній, повернути порожній рядок. - Перевірити, чи є перший символ рядка
number
цифрою за допомогою методуisdigit()
в умовіif
. - Якщо це цифра, конкатенувати її з результатом рекурсивного виклику
format_phone_number
, передаючи підрядок, починаючи з другого символу. - Якщо це не цифра, виконати рекурсивний виклик
format_phone_number
, пропускаючи перший символ.
Рішення
Дякуємо за ваш відгук!