Scala 是运行在 Java 虚拟机(Java Virtual Machine)之上,因此具有如下特点:
1)轻松实现和丰富的 Java 类库互联互通。
2)它既支持面向对象的编程方式,又支持函数式编程。
3)它写出的程序像动态语言一样简洁,但事实上它确是严格意义上的静态语言。
4)Scala 就像一位武林中的集大成者,将过去几十年计算机语言发展历史中的精萃集于一身,化繁为简,为程序员们提供了一种新的选择。设计者马丁·奥得斯基 希望程序员们将编程作为简洁,高效,令人愉快的工作。同时也让程序员们进行关于编程思想的新的思考。
先说下编程范式:
1)在所有的编程范式中,面向对象编程(Object-Oriented Programming)无疑是最大的赢家。
2)但其实面向对象编程并不是一种严格意义上的编程范式,严格意义上的编程范式分为:
命令式编程(Imperative Programming)
函数式编程(Functional Programming)
逻辑式编程(Logic Programming)。
面向对象编程只是上述几种范式的一个交叉产物,更多的还是继承了命令式编程的基因。
3)在传统的语言设计中,只有命令式编程得到了强调,那就是程序员要告诉计算机应该怎么做。而递归则通过灵巧的函数定义,告诉计算机做什么。因此在使用命令式编程思维的程序中,是现在多数程序采用的编程方式,递归出镜的几率很少,而在函数式编程中,大家可以随处见到递归的方式。
Scala 中循环不建议使用 while 和 do … while ,而建议使用递归
求1~99999999和以及花费时间:
大概花了6s
递归完成计算:
大概花了7s
代码:
package com.amhu.yx.test1
import java.text.SimpleDateFormat
import java.util.Date
object DiGui {
def main(args: Array[String]): Unit = {
//输出计算前的时间
val before: Date = new Date()
val dateFormat: SimpleDateFormat = new SimpleDateFormat("yyyy-MM--dd HH:mm:ss")
val date1 = dateFormat.format(before)
println("计算前的时间:" + date1)
var sum: BigInt = 0;
var num: BigInt = 1;
var max = BigInt(99999999)
sum = mx(num,sum)
println(sum)
//再次输出时间
val after: Date = new Date()
val date2 = dateFormat.format(after)
println("计算后的时间:" + date2)
}
def mx(num: BigInt,sum:BigInt):BigInt={
if (num <= 99999999) return mx(num+1,sum +num)
else return sum
}
}
使用递归求出最大值:
递归翻转字符串:
递归求阶乘:
递归使用的注意事项:
用递归求斐波那契额数列
越到后来,递归的次数越大,大概到40 个数时,就会卡住没有输出结果,我等了一分钟都没有结果就没等了。
因为fbn 中出现了重复计算:
尽量不要包含两个递归函数
斐波那契额数列的优化可以见:
https://blog.csdn.net/dadai_/article/details/50209511