Рекурсія
Рекурсія — це програмна техніка, коли функція викликає саму себе, щоб розв’язати задачу, розбиваючи її на менші частини. Особливо корисна для задач із повторюваною структурою або природними підзадачами.
Ключові елементи рекурсії:
- Базовий випадок: умова, яка зупиняє рекурсію;
- Рекурсивний випадок: частина, де функція викликає саму себе з простішим вхідним значенням.
Навіщо використовувати рекурсію?
Деякі задачі природно виражаються через менші підзадачі. Рекурсія забезпечує зрозумілий і елегантний спосіб їх розв’язання, коли функція викликає саму себе для обробки простіших випадків. Зазвичай використовується для обробки дерев, пошуку шляхів або розбиття структур (наприклад, списків, рядків).
1234567def 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
, пропускаючи перший символ.
Рішення
Дякуємо за ваш відгук!
single
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Awesome!
Completion rate improved to 4.35
Рекурсія
Свайпніть щоб показати меню
Рекурсія — це програмна техніка, коли функція викликає саму себе, щоб розв’язати задачу, розбиваючи її на менші частини. Особливо корисна для задач із повторюваною структурою або природними підзадачами.
Ключові елементи рекурсії:
- Базовий випадок: умова, яка зупиняє рекурсію;
- Рекурсивний випадок: частина, де функція викликає саму себе з простішим вхідним значенням.
Навіщо використовувати рекурсію?
Деякі задачі природно виражаються через менші підзадачі. Рекурсія забезпечує зрозумілий і елегантний спосіб їх розв’язання, коли функція викликає саму себе для обробки простіших випадків. Зазвичай використовується для обробки дерев, пошуку шляхів або розбиття структур (наприклад, списків, рядків).
1234567def 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
, пропускаючи перший символ.
Рішення
Дякуємо за ваш відгук!
Awesome!
Completion rate improved to 4.35single