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))
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值