您的位置:首页 > 编程语言

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

2016-01-04 21:59 204 查看
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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: