Kotlin Рекурсия
#KotlinВ этом уроке мы изучим рекурсивную функцию Kotlin. Как и другие языки программирования, мы можем использовать рекурсию в Kotlin.
Функция, которая вызывает себя, называется рекурсивной функцией, и этот процесс повторения называется рекурсией .
Всякий раз, когда вызывается функция, есть две возможности:
- Нормальный вызов функции
- Рекурсивный вызов функции
Нормальный вызов функции
Когда функция вызывается из блока main()
она вызывается как обычный вызов функции. В приведенном ниже примере sum()
вызывается за раз, и он выполняет свою инструкцию и завершает работу, возвращая сумму числа. Если мы хотим снова выполнить функцию, тогда мы должны вызвать sum()
из основного блока еще раз.
Вызов функции sum () из блока main () —
Рекурсивный вызов функции
Когда функция вызывает себя сама, это называется рекурсивным вызовом функции. Каждая рекурсивная функция должна иметь условие завершения, иначе выполнение программы входит в бесконечный цикл и приводит к ошибке переполнения стека.
Вызов функции callMe () из своего собственного блока —
Здесь мы использовали условие завершения, if( a > 0)
еще входит в бесконечный цикл. И это печатает значение от 5 до 0.
Пример 1: Найти факториал числа без использования условия завершения
// Котлинская программа факториала с использованием рекурсии
fun Fact(num: Int):Long{
return
num*Fact(num-1) // нет условия завершения
}
// основной метод
fun main() {
println("Factorial of 5 is: "+Fact(5))
// Рекурсивный вызов
}
Выход:
Exception in thread "main" java.lang.StackOverflowError
Пример 2: Найти факториал числа с помощью условия завершения.
// Котлинская программа факториала с использованием рекурсии
fun Fact(num: Int):Long{
return
if(num==1) num.toLong() // прекратить условие
else
num*Fact(num-1)
}
// основной метод
fun main() {
println("Factorial of 5 is: "+Fact(5))
// Рекурсивный вызов
}
Выход:
Factorial of 5 is: 120
Работа факторной программы —
Рекурсивный вызов Fact () объясняется шаг за шагом на следующем рисунке:
Пример 3: Найти сумму элементов массива с помощью рекурсии
// два параметра передали массив и размер массива
fun sum(args: Array<Int> , index:Int ):Int{
return
if(index<=0) 0
else
(sum(args ,index-1) + args[index-1]) // рекурсивный вызов функции
}
fun main() {
// инициализация массива
val array = arrayOf(1,2,3,4,5,6,7,8,9,10)
// размер массива
val n = array.size
val result = sum(array,n) // нормальный вызов функции
println("The sum of array elements is: $result")
}
Выход:
The sum of array elements is: 55
Объяснение:
Здесь мы инициализировали массив и передали в качестве аргумента функцию sum (). В каждом рекурсивном вызове значение индекса уменьшается на единицу. Если индекс равен нулю или меньше, то прекратите его и верните сумму всех элементов.