Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.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 - Fatal编程技术网

Scala 如何根据条件求斐波那契数的和?

Scala 如何根据条件求斐波那契数的和?,scala,Scala,我试着根据一个条件求斐波那契数的和。假设我有我的功能: def findingSum(lower: Int, upper: Int): Int{} 它传递两个数字。如果我通过findingSum(20,90),我的函数应该找到这些数字之间的斐波那契数的和,换句话说,我应该得到21+34+55+89的和 代码: def findingSum(下限:Int,上限:Int):Int={ var总和=0; 无功电流 var prev=1 var-prev=0 为了 好了,(我假设你有这个方法来验证这个

我试着根据一个条件求斐波那契数的和。假设我有我的功能:

def findingSum(lower: Int, upper: Int): Int{}
它传递两个数字。如果我通过findingSum(20,90),我的函数应该找到这些数字之间的斐波那契数的和,换句话说,我应该得到21+34+55+89的和

代码:

def findingSum(下限:Int,上限:Int):Int={
var总和=0;
无功电流
var prev=1
var-prev=0
为了

好了,(我假设你有这个方法来验证这个数字是否是范围内的斐波那契数)

首先你要创建一个斐波那契流

def fib: Stream[Int] = 0 #:: fib.scan(1)(_+_)
然后你取,取,和。(或者取,取,和。这两种方法都有效。)

但是这种安排确实消除了我前面提到的良好缓存,因此在函数之外的某个地方定义
fib
可能是有意义的,这样它就不会在每次调用时都被重新定义。我可能会使用以下方法:

def fib: Stream[Int] = 0 #:: fib.scan(1)(_+_)
def findingSum(l: Int, u: Int) = fib.takeWhile(_ <= u).dropWhile(_ <= l).sum
def fib:Stream[Int]=0#:::fib.scan(1)(u+u)

def findingSum(l:Int,u:Int)=fib.takeWhile(u)您的解决方案有效,但出于某种原因,它将数字相加减1。假设将fibonnaci数字从0到10相加为20,但您的解决方案将19I替换为“直到”,这不包括上限-到,包括一个。现在应该可以正常工作了。你参加Scala课程吗?这是作业吗?我自己学习Scala。不,这不是作业。即使你把它从“到”改为“到”仍然不起作用…不知怎的,总和是负1,不知道我为什么投票给你。谢谢你的帮助!我还在学习Scala。你如何用我的函数实现你的代码?def findingSum(lower:Int,upper:Int):Int={…顺便说一句,谢谢你的帮助:)!!如果您多次调用
findingSum
,您确定
fib
会被缓存吗?这是一个
def
。如果是这样,请给出一些解释,因为这很有趣。@ukasz,您是对的。我已经添加了一个澄清/更正。感谢您检查我。我认为在流中,1的和可能会发生.000.000 Fibonacci数需要对每个流项进行求值并将其保存在内存中。这对于仅仅求和是不可取的。但无论如何看起来都很酷。
def fib: Stream[Int] = 0 #:: fib.scan(1)(_+_)
fib.takeWhile(_ <= upper).dropWhile(_ <= lower).sum
def findingSum(lower: Int, upper: Int): Int = {
  def fib: Stream[Int] = 0 #:: fib.scan(1)(_+_)
  fib.takeWhile(_ <= upper).dropWhile(_ <= lower).sum
}
def fib: Stream[Int] = 0 #:: fib.scan(1)(_+_)
def findingSum(l: Int, u: Int) = fib.takeWhile(_ <= u).dropWhile(_ <= l).sum