ScalaNote23-递归应用

网友投稿 654 2022-10-08

ScalaNote23-递归应用

ScalaNote23-递归应用

直接看递归的案例~

Exercise01

计算1-50的和!同时使用循环和递归,并且比较执行时间

import org.joda.time.format.DateTimeFormatimport org.joda.time.{DateTime, Period,Duration}//单位:毫秒val time1 = System.currentTimeMillis()println("Start Time: "+time1)var s1 = 0for(i <-1 to 50000){ s1+=i}println("s1 = "+s1)val time2 = System.currentTimeMillis()println("End Time:"+time2)println("Execution Time:"+(time2-time1))

Start Time: 1584501495619s1 = 1250025000End Time:1584501495624Execution Time:5import org.joda.time.format.DateTimeFormatimport org.joda.time.{DateTime, Period, Duration}time1: Long = 1584501495619s1: Int = 1250025000time2: Long = 1584501495624

def recursiveSum(n:BigInt):BigInt={ if(n==1){ 1 }else{ n+recursiveSum(n-1) } }val time1 = System.currentTimeMillis()println("Start Time: "+time1)println("s1 = "+recursiveSum(5000))val time2 = System.currentTimeMillis()println("End Time:"+time2)println("Execution Time:"+(time2-time1))

Start Time: 1584502199904s1 = 12502500End Time:1584502199905Execution Time:1recursiveSum: (n: BigInt)BigInttime1: Long = 1584502199904time2: Long = 1584502199905

jupyter中递归次数多好像报错。。。idea中没有这样的问题

Exercise02

求一个List中的最大值。List本身有内置函数,我们也可以用简单的冒泡排序等等

val list= List(1,2,3,4,5)list.max

list: List[Int] = List(1, 2, 3, 4, 5)res31: Int = 5

循环方式

var maxValue = 0for (i<-list){ if (i>maxValue) maxValue=i else maxValue}println("maxValue = "+maxValue)

maxValue = 5maxValue: Int = 5

递归方式 递归需要搞明白tail函数,list.tail返回的是除第一个元素之外的所有元素

def myMax(xs: List[Int]): Int = { if (xs.isEmpty) // 如果list为空,抛异常 throw new java.util.NoSuchElementException // 1.如果只有一个元素,直接返回该元素 //2.后面不停递归,大概逻辑是第一个元素和others的最大值比较 //3.这里myMax被递归用了两次// println(xs.head) if (xs.size == 1) xs.head else if (xs.head > myMax(xs.tail)) { xs.head } else { myMax(xs.tail) } }myMax(list)

myMax: (xs: List[Int])Intres50: Int = 5

Exercise03

翻转字符串,这也有好几个方法。

var Str = "abcd"Str.reverse

Str: String = abcdres51: String = dcba

def reverse(xs: String): String = if (xs.length == 1) xs else reverse(xs.tail) + xs.headreverse(Str)

reverse: (xs: String)Stringres52: String = dcba

Exercise04

递归

def factorial(n: Int): Int = if (n == 0) 1 else n * factorial(n - 1)factorial(5)

factorial: (n: Int)Intres53: Int = 120

2020-03-18 于南京市栖霞区

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:美食搜索 小程序(mpvue框架)(兴隆镇附近美食搜索)
下一篇:小程序组件化开发框架
相关文章

 发表评论

暂时没有评论,来抢沙发吧~