Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 分数和的尾部递归函数_Scala_Recursion_Functional Programming_Tail Recursion - Fatal编程技术网

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))