Scala 分数和的尾部递归函数
我试图将这个递归函数转换为尾部递归函数Scala 分数和的尾部递归函数,scala,recursion,functional-programming,tail-recursion,Scala,Recursion,Functional Programming,Tail Recursion,我试图将这个递归函数转换为尾部递归函数 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 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)
}
def sumOfFractions(n:Int):双精度={
def内部(acc:Int,n:Int):双精度={
如果(n您需要基本情况(n请更正您的代码
1) 返回acc(累加器),当n感谢修理它的人!而且它看起来像我需要调用内部(1,n)而不是内部(0,n)使用foldLeft代码变得优雅不完全是op所要求的,但肯定更惯用
def sumOfFractions(n: Int):Double = {
def inner(acc: Double, n: Int): Double =
if (n <= 1) acc else inner(acc + (1.0 / n), n - 1)
inner(0, n)
}
def sumOfFractions(n: Int): Double = {
def inner(acc: Double, n:Int): Double = if(n <= 1) acc
else inner(acc + (1.0 / n), n - 1)
inner(0,n)
}
def sumOfFractions(n: Int): Double =
(1 to n).foldLeft(0.0)((r, c) => r + (1.0 / c))