Рекурсивные функции
Часть раздела Логика и управление потоком путешествия по Kotlin на Coddy. Урок 44 из 63.
Рекурсивная функция вызывает саму себя для решения меньшей подзадачи. Базовый случай возвращает результат без ещё одного рекурсивного вызова. Для итогового обратного отсчёта ноль — это базовый случай, а n - 1 приближает к нему. Обычная рекурсия использует пространство стека вызовов, поэтому глубина входных данных должна быть небольшой.
fun countdownSum(n: Int): Int {
if (n == 0) return 0
return n + countdownSum(n - 1)
}Внутри main:
println(countdownSum(4))Вызовы складывают четыре, три, два и один, а затем останавливаются на нуле.
Для рекурсии необходим достижимый базовый случай и продвижение к нему.
Задание
СреднеЗавершите recursiveSum с параметром number: Int. Используя рекурсию, верните сумму от 1 до number. number находится в диапазоне от 0 до 100. Результат для нуля равен нулю.
Если выше не указаны более строгие границы, коллекции содержат не более 100 элементов на каждом уровне, а целочисленные аргументы и целочисленные значения коллекций находятся в диапазоне от -1000 до 1000. Текст, предоставленный для разбора, может содержать недопустимые представления или представления, выходящие за допустимый диапазон, как описано.
Верните значение типа Int. Сохраните предоставленный код ввода/вывода. Он считывает скалярные аргументы по одному в строке; список начинается с его количества элементов, за которым следуют его элементы, а отображение начинается с количества записей, за которым следуют каждый ключ и значение. Вложенные списки повторяют формат «количество и элементы» для каждой строки. Предоставленный main выводит возвращаемое значение, за которым следует один перевод строки. Для списков используется стандартный формат Kotlin со скобками; не выводите дополнительные метки.
Попробуйте сами
fun recursiveSum(number: Int): Int {
// Напишите ваше решение здесь.
return 0
}
fun main() {
val number = readln().toInt()
println(recursiveSum(number))
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Карты, часть 1
Создание картБезопасный доступ к картамОбновление картПроверка ключейПовторение — складской учёт4Вложенные коллекции
Списки списковОбход строкСводки по строкамСведение вложенных списковПовторение — ряды мест7Конвейеры коллекций
Преобразование с помощью MapФильтрация значенийПроверка правил коллекцийНакопление с помощью FoldПовторение — одобренные итоги2Карты. Часть 2
Перебор записей картыКлючи и значенияКарты частотВложенные картыПовторение — отчёт о частотах5Проект — Книга контактов
Сохранение контактовПоиск контактов3Множества и принадлежность
Создание множествОбновление множествОперации над множествамиПроверка подмножествПовторение — гости мероприятия6Значения функций
Написание лямбдТипы функцийПередача функцийЗахваченные переменныеПовторение — настраиваемый счёт9Расширенный контроль потока выполнения
Защитные условияПрерывание именованных цикловПродолжение именованных цикловРекурсивные функцииПовторение — первая допустимая строкаПотренируйтесь самостоятельно: Песочница Kotlin