Menu
CoddyTech

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

Часть раздела Логика и потоки выполнения путешествия по GDScript на Coddy. Урок 58 из 78.

У каждой рекурсивной функции есть две одинаковые части:

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

Факториал 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
challenge icon

Задание

Легко

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

  • fibonacci(1) равно 0
  • fibonacci(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
quiz iconПроверьте себя

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

Все уроки раздела Логика и потоки выполнения

Потренируйтесь самостоятельно: Онлайн-компилятор GDScript