【问题标题】:Sum of even Fibonacci numbers?偶数斐波那契数的总和?
【发布时间】:2014-01-11 03:06:52
【问题描述】:

斐波那契数列中的每个新项都是通过添加前两项来生成的。从 1 和 2 开始,前 10 个术语将是:

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

通过考虑斐波那契数列中值不超过四百万的项,求偶数项之和。

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 的第二个负数索引 a 负2?感谢您的解释。

【问题讨论】:

    标签: ruby


    【解决方案1】:

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

    【讨论】:

    • 让我理解这个a = [10,20,30,40] 然后a[-2] 等于30?
    • 正确,而且由于这是Ruby,您可以在irb中自行检查
    • 是的,我确实在 irb 中检查过! ;)
    【解决方案2】:

    如果你仔细观察,你会看到以下序列:

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

    斐波那契数列的映射公式为:

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

    1 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 条件。

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

    【讨论】:

      【解决方案3】:
      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])
      

      斐波那契数列中的每个新项都是通过添加前两项来生成的。从 1 和 2 开始,前 10 个术语将是:

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

      通过考虑斐波那契数列中值不超过四百万的项,求偶数项之和。

      【讨论】:

        猜你喜欢
        • 2021-12-21
        • 1970-01-01
        • 2015-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-04
        • 1970-01-01
        • 2016-04-07
        相关资源
        最近更新 更多