递归函数
/**
学习如何编写scala的递归函数
知识点
1.scala递归函数的返回值类型必须显示声明
2.编写递归函数掌握两要素:①找出项与项之间的函数关系 ②找出结束条件
3.scala递归函数,结束条件的返回值,必须用return返回
*/
object Demo {
println("Welcome to the Scala worksheet") //> Welcome to the Scala worksheet
//给定一个斐波那契数列:2 3 5 8 13 21 ...
//编写一个递归函数 ,def f1(n:Int)={} 通过此递归函数,判断第n项的数字是多少
//函数关系:f(n)=f(n-1)+f(n-2)
//结束条件:f(0)=2 f(1)=3
def f1(n:Int):Int={
if(n==0) return 2
if(n==1) return 3
else f1(n-1)+f1(n-2)
} //> f1: (n: Int)Int
f1(6) //> res0: Int = 34
//练习1:给定一个数列:2 3 4 9 16 81 ...
//编写一个递归函数 ,def f2(n:Int)={} 通过此递归函数,判断第n项的数字是多少
//函数关系:f(n)=f(n-2)*f(n-2)
//结束条件:f(0)=2 f(1)=3
def f2(n:Int):Int={
if(n==0) return 2
if(n==1) return 3
else f2(n-2)*f2(n-2)
} //> f2: (n: Int)Int
f2(7) //> res1: Int = 6561
//练习2:给定一个数列:2 3 4 9 8 27 16 81 ...
//编写一个递归函数 ,def f3(n:Int)={} 通过此递归函数,判断第n项的数字是多少
//函数关系:n是偶数项 f(n)=2*f(n-2) n是奇数项 f(n)=3*f(n-2)
//结束条件:f(0)=2 f(1)=3
def f3(n:Int):Int={
if(n==0)return 2
if(n==1)return 3
if(n%2==0)2*f3(n-2)
else 3*f3(n-2)
} //> f3: (n: Int)Int
f3(9) //> res2: Int = 243
def mi(x:Int,n:Int):Double={
if(n==0) return 1
else if(n>0&&n%2==0) mi(x,n/2)*mi(x,n/2)
else if(n>0&&n%2==1) mi(x,n-1)*x
else 1/mi(x,-n)
} //> mi: (x: Int, n: Int)Double
mi(2,10) //> res3: Double = 1024.0
mi(2,7) //> res4: Double = 128.0
mi(2,0) //> res5: Double = 1.0
mi(2,-1) //> res6: Double = 0.5
}