59.scala编程思想笔记——列表和递归

59.scala编程思想笔记——列表和递归

欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/50458713
源码下载连接请见第一篇笔记。

在几乎所有情况下,都应该选择Vector作为序列容器,因为会以最高效的方式执行大多数操作。有时,Scala 会选择List.

如下:

scala>Seq(1,3,5,7)

res1: Seq[Int] = List(1, 3, 5, 7)

         List针对称为递归的特殊类型的操作进行了优化。在递归中,对序列的第一个元素执行操作,然后在操作内部调用同一个方法,并将序列中剩余的部分传递给该方法。

         例如:

def rPrint(s:Seq[Char]):Unit = {

  print(s.head)

 if(s.tail.nonEmpty)

   rPrint(s.tail) // Recursive call

}

 

rPrint("Recursion")

执行输出如下:

Recursion

其中head调用返回第一个元素,而tail会产生剔除第一个元素后的剩余序列。

递归求和如下:

import com.atomicscala.AtomicTest._

 

def sumIt(toSum:List[Int], sum:Int=0):Int =

  if(toSum.isEmpty)

    sum

  else

   sumIt(toSum.tail, sum + toSum.head)

 

sumIt(List(10, 20, 30, 40, 50)) is 150

不过在,Scala的集合中有一个内建的sum,其实可以无需编写sumIt,如下:

import com.atomicscala.AtomicTest._

 

List(10, 20, 30, 40, 50).sum is 150

Vector(10, 20, 30, 40, 50).sum is 150

Seq(10, 20, 30, 40, 50).sum is 150

Set(10, 20, 30, 40, 50, 50, 50).sum is 150

(10 to 50 by 10).sum is 150

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值