gcd.scala
object gcd{ def main(args:Array[String]){ println( gcd1(args(0).toInt,args(1).toInt)) println( gcd2(args(0).toInt,args(1).toInt)) } def gcd1(x:Int,y:Int):Int={ var a=x var b=y while(a!=0){ var temp=a a=b%a b=temp } b } def gcd2(x:Int,y:Int):Int={ if(x==0) y else gcd2(y%x,x) } }
$ scalac gcd.scala
$ scala gcd 12 21
$ scala gcd 21 12
gcd1採用迭代,gcd2 採用遞迴,gcd1和gcd2基本上已經做到最簡.
為了方便記憶,用下圖表示思考過程: