Scala學習——尾遞歸

在尾遞歸中,函數可以調用自身,並且該調用時函數的最後一個(“尾部”)操作。尾遞歸時能把函數優化爲循環的重要的一種遞歸。循環可以消除潛在的棧溢出的風險,同時也因爲消除了函數調用開銷而提升了效率。尾遞歸函數中所有遞歸形式的調用都出現在函數的末尾,當編譯器檢測到一個函數調用的是尾遞歸時,會覆蓋當前的活動記錄而不是在棧中去創建一個新的。

尾遞歸示例:

object Demo {
    def main(args: Array[String]) {
	 	//求5的階乘
	 	println(factorial(5,1)) 

	 	//尾遞歸求階乘
	 	@annotation.tailrec //告訴編譯器要尾遞歸
	 	def factorial(n:Int,m:Int):Int={  //和上一行的聲明之間不能有空行的存在,否則會編譯錯誤
           if(n<=0) m
           else factorial(n-1,m*n) 
		}     
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章