甚至斐波纳契数的总和?

时间:2014-01-11 03:06:52

标签: ruby

Fibonacci序列中的每个新术语都是通过添加前两个术语生成的。从1和2开始,前10个术语将是:

1,2,3,5,8,13,21,34,55,89,......

通过考虑Fibonacci序列中的值不超过四百万的项,找到偶数项的总和。

a    = [1,2]
upto = 4_000_000

while a[-2] + a[-1] < upto
  a << a[-2] + a[-1]
end

sum  = 0
a.each { |x| sum += x if x.even? }

puts "The result is #{sum}"

这是如何工作的?什么是a[-2]?那有什么意思? a减2 的负第二个索引?感谢您的解释。

3 个答案:

答案 0 :(得分:3)

这是负面指数。 a[-1]a[-2]是数组a的最后两个元素。

答案 1 :(得分:3)

如果仔细观察,您会看到以下顺序:

1 1 2 3 5 8 13 21 34 55 89 144 ...

映射Fibonacci序列的公式是:

您只需要偶数数字的总和,例如:

1 2 3 5 8 13 21 34 55 89 144 ...

因此,您可以映射新公式,例如:

您将获得以下序列:

2 8 34 144 ...

代码示例(Go):

package main

import "fmt"

func fibonacci() func() int {
    first, second := 0, 2
    return func() int {
        ret := first
        first, second = second, first+(4*second)
        return ret
    }
}

func main() {
    sum := 0
    f := fibonacci()
    for i := 0; sum < 4000000; i++ {
        sum += f()
    }
    fmt.Println(sum)
}

在这种情况下,你不需要if条件。

希望对你有所帮助!干杯!

答案 2 :(得分:-1)

def fibonacci(array)
new_fibs = []
new_fibs << array[0]
new_fibs << array[1]
sum = 0
i = 0
while new_fibs.last < 4_000_000
    sum = new_fibs[i] + new_fibs[i+1]
    new_fibs << sum
    i += 1
end


total_even = 0
new_fibs.each do |fibs|
    if fibs%2 == 0
        total_even = total_even + fibs
    end
end
p total_even
end

fibonacci([1,2])

Fibonacci序列中的每个新术语都是通过添加前两个术语生成的。从1和2开始,前10个术语将是:

1,2,3,5,8,13,21,34,55,89,......

通过考虑Fibonacci序列中的值不超过四百万的项,找到偶数项的总和。