我想这个递归函数转换成尾递归函数尾递归函数
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