Tag: 斐波那契

了解Fibonacci序列

我有一个在线发现的计算Fibonacci序列的算法。 我觉得有点像个傻瓜,但我不知道它是如何运作的! def fib(n) if n == 0 || n == 1 return n end if n >= 2 return fib(n-1) + fib(n-2) end end 如果我用10的参数调用方法,为什么它不返回18? 我假设在这里发生了一些递归,但我不知道。 有人能帮我理解吗?

Fibonacci One-Liner

我正试图用Ruby单行解决Project Euler中的问题,我很好奇是否有更优雅的问题解决方案: Fibonacci序列中的每个新术语都是通过添加前两个术语生成的。 从1和2开始,前10个术语将是: 1,2,3,5,8,13,21,34,55,89 …… 通过考虑Fibonacci序列中的值不超过四百万的项,找到偶数项的总和。 这是我在Ruby中的一行解决方案: (1..32).inject([0,1]) {|arr, i| (arr << arr[-1] + arr[-2] if arr[-1] + arr[-2] <= 4000000) || arr}.inject(0) {|total, i| total += i.even? ? i : 0} 我主要担心的是我只使用范围(1..32),因为我碰巧知道在Fibonacci序列中的数字开始超过4,000,000之前,所有这一切都是必要的。 我不希望这种情况以某种方式构建到单行中,但我无法弄明白。 不允许使用半冒号!

Ruby Fibonacci算法

以下是我编写的用于计算Fibonacci序列中的值的方法: def fib(n) if n == 0 return 0 end if n == 1 return 1 end if n >= 2 return fib(n-1) + (fib(n-2)) end end 它起作用n = 14,但之后我得到一条消息说程序花了太长时间才响应(我正在使用repl.it)。 任何人都知道为什么会这样吗?