Menu
Coddy logo textTech

Рекурсивные функции. Часть 2

Часть раздела Logic & Flow путешествия по Python на Coddy — урок 61 из 78.

Рекурсивные функции обычно состоят из двух частей:

  1. Базовый случай: Определяет, когда рекурсия должна остановиться.
  2. Рекурсивный шаг: Вызывает функцию саму себя с меньшими входными данными.

Пример: Вычисление факториала с использованием рекурсии:

def factorial(n):
    if n == 1:  # Базовый случай
        return 1
    return n * factorial(n - 1)  # Рекурсивный вызов

print(factorial(5))  # Вывод: 120

Здесь функция продолжает вызывать саму себя с n - 1, пока не достигнет 1, где рекурсия останавливается.

Пример: Реверс строки:

def recursive_reverse(s):
	if len(s) <= 1:  # Базовый случай: пустая строка или строка из одного символа
		return s
	else:
		return recursive_reverse(s[1:]) + s[0]  # Рекурсивный шаг

text = "hello"
result = recursive_reverse(text)
print(result)
# Вывод: olleh

В этом примере функция recursive_reverse вызывает саму себя с оставшейся частью строки (s[1:]) до тех пор, пока строка не станет пустой или не будет содержать только один символ. Каждый вызов добавляет первый символ к результату рекурсивного вызова, эффективно переворачивая строку.

challenge icon

Задание

Легко

Напишите рекурсивную функцию с именем fibonacci, которая принимает положительное целое число n в качестве аргумента и возвращает n-е число Фибоначчи. Последовательность Фибоначчи определяется следующим образом:

  • fibonacci(1) = 0
  • fibonacci(2) = 1
  • fibonacci(n) = fibonacci(n-1) + fibonacci(n-2) для n > 2.

Пример входных данных:

n = 6

Пример выходных данных:

5

Шпаргалка

Рекурсивные функции состоят из двух основных частей:

  1. Базовый случай: определяет, когда рекурсия должна остановиться
  2. Рекурсивный шаг: вызывает функцию саму себя с меньшими входными данными

Пример вычисления факториала:

def factorial(n):
    if n == 1:  # Базовый случай
        return 1
    return n * factorial(n - 1)  # Рекурсивный вызов

print(factorial(5))  # Результат: 120

Пример переворота строки:

def recursive_reverse(s):
    if len(s) <= 1:  # Базовый случай: пустая строка или строка из одного символа
        return s
    else:
        return recursive_reverse(s[1:]) + s[0]  # Рекурсивный шаг

text = "hello"
result = recursive_reverse(text)
print(result)  # Результат: olleh

Попробуйте сами

def fibonacci(n):
    # Напишите здесь код
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Logic & Flow