gpt4 book ai didi

scala - 分数和的尾递归函数

转载 作者:行者123 更新时间:2023-12-02 08:16:38 25 4
gpt4 key购买 nike

我正在尝试将这个递归函数转换为尾递归函数

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 编写的,但任何语言的示例都会有所帮助。

最佳答案

您需要基本情况​​ ( n <= 1 ) 来返回累加器,而不是 1.0 .您还会遇到问题,因为累加器是 Int而不是 Double ,这意味着 + (1 / n)只是添加 0 (1: Int 除以任何大于一的 n: Int 的结果)。

您可以通过更改 acc 来解决此问题的类型并使倒数的分子成为字面上的 double :

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

这应该有效。

关于scala - 分数和的尾递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41383108/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com