📜  Kotlin 递归

📅  最后修改于: 2022-05-13 01:54:38.273000             🧑  作者: Mango

Kotlin 递归

在本教程中,我们将学习 Kotlin 递归函数。像其他编程语言一样,我们可以在 Kotlin 中使用递归。
调用自身的函数称为递归函数,这种重复过程称为递归

每当调用一个函数时,就有两种可能性——

  1. 普通函数调用
  2. 递归函数调用

普通函数调用

当从main()块调用函数时,它被称为普通函数调用。在下面的示例中,一次调用sum()并执行其指令并终止并返回数字的总和。如果我们想再次执行该函数,那么我们应该再一次从主块调用sum()

从 main() 块调用 sum()函数–

递归函数调用

当一个函数调用自身时,它被称为递归函数调用。每个递归函数都应该有终止条件,否则程序执行进入无限循环并导致堆栈溢出错误。

从它自己的块调用 callMe()函数-

在这里,我们使用了终止条件if( a > 0)否则进入无限循环。它打印从 5 到 0 的值。

示例 1:在不使用终止条件的情况下查找数字的阶乘

// Kotlin program of factorial using recursion
fun Fact(num: Int):Long{
    return  num*Fact(num-1)  // no terminate condition
}    
//main method
fun main() {
    println("Factorial of 5 is: "+Fact(5))
//Recursive call
}

输出:

Exception in thread "main" java.lang.StackOverflowError

示例 2:使用终止条件查找数字的阶乘。

// Kotlin program of factorial using recursion
fun Fact(num: Int):Long{
    return if(num==1) num.toLong()        // terminate condition
    else num*Fact(num-1)
}
//main method
fun main() {
    println("Factorial of 5 is: "+Fact(5))
//Recursive call
}

输出:

Factorial of 5 is: 120

阶乘程序的工作 -

Fact() 的递归调用在下图中一步一步解释:-

示例 3:使用递归查找数组元素的总和

// two parameters passed an array and size of array
fun sum(args: Array , index:Int ):Int{    
    return if(index<=0) 0
    else (sum(args ,index-1) + args[index-1])      // recursive function call
}
  
fun main() {
    // array initialization
    val array = arrayOf(1,2,3,4,5,6,7,8,9,10)  
    // size of array
    val n = array.size 
    val result = sum(array,n)             // normal function call
    println("The sum of array elements is: $result")
}

输出:

The sum of array elements is: 55

解释:
在这里,我们初始化了一个数组并作为参数传递给 sum()函数。在每个递归调用中,索引值减一。如果索引等于零或小于则终止它并返回所有元素的总和。