Scala递归使用中的“坑”

需求

        递归实现阶乘。

分析

  1. 递归先找到程序的出口,本需求中就是当n=1时返回1。
  2. 如果不是程序的出口,那么就调用n*f(n-1)。

代码实现(踩坑版)

object Scala04_Recursion {
    
    
  def main(args: Array[String]): Unit = {
    
    
    def recursion(n: Int): Int ={
    
    
      if (n == 1){
    
    
        1
      }
      
      n * recursion(n-1)
    }

    println(recursion(4))
  }
}

当执行上面的代码时,就会看到一个特别醒目的错误:StackOverflowError

错误原因

        Scala代码中,if方法是有返回值的,返回值就是最后一行代码的值!!我们的程序在执行过程中,一直会调用n * recursion(n-1),而找不到出口。而我们的方法是在栈内存中执行,所以会报栈内存溢出的错误。

代码实现(正确版)

object Scala04_Recursion {
    
    
  def main(args: Array[String]): Unit = {
    
    
    def recursion(n: Int): Int ={
    
    
      if (n == 1){
    
    
        return 1
      }

      n * recursion(n-1)
    }

    println(recursion(4))
  }
}

猜你喜欢

转载自blog.csdn.net/FlatTiger/article/details/114389100
今日推荐