scala学习笔记(三)

本文介绍了Euclid算法和Factorial算法的实现,并探讨了尾递归的优势及其在Scala中的应用。通过对比,展示了如何优化递归算法以节省资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

迭代

Euclid算法

虽然是个到处都能看到的算法,但是还是想写下来,记录记录,太美
最大公约数

def gcd(a: Int, b: Int): Int =
	if (b == 0) a else gcd(b, a % b)
factorial算法
def factorial(n: Int): Int =
	if (n == 0) 1 else n * factorial(n - 1)

对比这两个算法,Euclid算法是尾递归,factorial算法不是尾递归,尾递归可以节约空间,不需要额外开辟空间,而不是尾递归的函数,需要额外空间来储存递归接口的信息。

@tailrec注释

scala提供了关于尾递归的注释**@tailrec**,如果标注了该注释,但是最后该函数被编译时,发现并不是尾递归,就会报错。

@tailrec
def gcd(a: Int, b: Int): Int = ...
将factorial变成尾递归
  def factorial(n: Int): Int = {
    def loop(acc: Int, n: Int): Int =
      if (n == 0) acc
      else loop(acc * n, n - 1)
    loop(1, n)
  }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值