Kotlin Рекурсия

Kotlin Рекурсия

#Kotlin


В этом уроке мы изучим рекурсивную функцию Kotlin. Как и другие языки программирования, мы можем использовать рекурсию в Kotlin.

Функция, которая вызывает себя, называется рекурсивной функцией, и этот процесс повторения называется рекурсией .


Всякий раз, когда вызывается функция, есть две возможности:

  1. Нормальный вызов функции
  2. Рекурсивный вызов функции

Нормальный вызов функции

Когда функция вызывается из блока 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 (). В каждом рекурсивном вызове значение индекса уменьшается на единицу. Если индекс равен нулю или меньше, то прекратите его и верните сумму всех элементов.




Report Page