Рекурсивные функции. Часть 2
Часть раздела Логика и потоки выполнения путешествия по GDScript на Coddy. Урок 58 из 78.
У каждой рекурсивной функции есть две одинаковые части:
- Базовый случай указывает, когда нужно остановиться.
- Рекурсивный шаг вызывает функцию с меньшим входным значением.
Факториал n — это n * (n - 1) * ... * 1, поэтому факториал n равен n, умноженному на факториал n - 1:
func factorial(n: int) -> int:
if n == 1: # базовый случай
return 1
return n * factorial(n - 1) # рекурсивный шагfactorial(5) вызывает factorial(4), который вызывает factorial(3), и так далее до factorial(1), который возвращает 1. На обратном пути каждый вызов выполняет умножение: результат равен 120.
Входные данные меньшего размера не обязательно должны быть меньшим числом. Подойдёт и более короткая строка. Эта функция переворачивает строку:
func reverse_text(text: String) -> String:
if text.length() <= 1: # базовый случай
return text
return reverse_text(text.substr(1)) + text[0]text.substr(1) — это строка без первого символа. Функция переворачивает эту более короткую строку и добавляет первый символ в конец. Строка из нуля или одного символа уже перевёрнута, поэтому это базовый случай.
print(reverse_text("hello"))ollehЗадание
ЛегкоНапиши рекурсивную функцию с именем fibonacci, которая принимает положительное целое число n и возвращает n-е число Фибоначчи:
fibonacci(1)равно0fibonacci(2)равно1- для
n > 2значениеfibonacci(n)равноfibonacci(n - 1) + fibonacci(n - 2)
Например, fibonacci(6) возвращает 5 (последовательность начинается с 0, 1, 1, 2, 3, 5).
Тесты сами вызывают fibonacci(). Не вызывай её и ничего не выводи.
Попробуйте сами
func fibonacci(n: int):
# Напишите код здесь
pass
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и потоки выполнения
1Строки: углублённое изучение
Методы строкПоиск в строкахЗамена и обрезка пробеловРазделение и объединениеПовторение — проверка имени пользователя4Словари. Часть 2
Вложенные словариМассивы словарейОбъединение словарейКопирование словарейПовторение — подсчёт частоты10Продвинутые функции
Возврат нескольких значенийЛямбда-функции. Часть 1Лямбда-функции. Часть 2Повторение — сортировка с помощью лямбда-функцииРекурсивные функции. Часть 1Рекурсивные функции. Часть 2Повторение — сумма вложенного массива13Система управления запасами
Обзор проектаДобавление товара2Продвинутое управление ветвлением
Сопоставление с переменнымиУсловия в шаблонахШаблоны массивовШаблоны словарейПроверка принадлежностиИтоги — парсер команд5Приложение «Телефонная книга»
Показать менюДобавить контакт8Менеджер успеваемости студентов
Обзор проектаДобавить студента3Многомерные массивы
Основы двумерных массивовДоступ к элементам двумерного массиваВложенные циклы с двумерными массивамиПовторение: двумерные массивыРваные массивыТипичные шаблоны работы с двумерными массивамиПовторение: игровое поле6Множества и словари
Что такое множество?Словарь как множествоДобавление и удалениеОбъединение и пересечениеРазность множествПовторение — удаление дубликатовПотренируйтесь самостоятельно: Онлайн-компилятор GDScript