我想這個遞歸函數轉換成尾遞歸函數尾遞歸函數
def sumOfFractions(n: Int): Double = {
require(n > 0, "Parameter n has to be greater than 0");
if (n==1)
1.0
else
1.0/n + sumOfFractions(n - 1)
}
我認爲,這個解決方案會工作,但它運行時,它只是返回1.0
def sumOfFractions(n:Int):Double = {
def inner(acc:Int, n:Int): Double={
if(n <= 1)1.0
else
{
inner(acc+(1/n),n-1)
}
}
inner(0,n)
}
我認爲這是因爲累加器沒有被正確更新,但我不明白爲什麼。代碼在Scala中,但任何語言的示例都會有所幫助。
使用foldLeft代碼變得優雅 – pamu