def fact(x:Int):Int=if (x==0)1 else fact(x-1)*x
指定返回值的类型也很easydef kuohao(str:String,left:String="[",right:String="]")
然后也可以带名字调用,和python一样*
和python一样,但是位置有不一样的 def sum(args:Int*)={var s=0;for(i<-args)s+=i;s}
因为要指定类型呀 args 的类型是 Seqsum(1 to 10: _*)
那么来看看著名的递归定义吧 def recurSum(args:Int*):Int=if (args.length==0) 0 else args(0)+recurSum(args.tail: _*)
(吐个槽,这个语法怎么记呢?为什么不能简单的反向呢?一点都不自然,人家python做的就很好,就连java本来用三个小点,也很好,很有语义化)答案
var s=BigInt(1);"Hello".foreach((i)=> {s*=BigInt(i)});println(s)
或 "Hello".foldLeft(BigInt(1))(_*BigInt(_))
或 "Hello".aggregate(BigInt(1))(_*BigInt(_),(x,_)=>x)
def product(s:String) = s.foldLeft(BigInt(1))(_*BigInt(_))
def productRecur(s:String):BigInt = if (s.length==0) 1 else productRecur(s.tail)*BigInt(s(0))
def mypow(x:Double,n:Int):Double = if (n == 0) {
1
} else {
if (n < 0) {
1 / mypow(x,-n)
} else {
if (n % 2 == 0) {
val y=mypow(x,n/2)
y*y
} else {
x*mypow(x,n-1)
}
}
}