Fibonacci数列是一个经典的数学序列,其定义如下:前两个数为0和1(或1和1),后续每个数都是前两个数之和。在Ruby中实现Fibonacci数列的整数和计算可以通过多种方式完成,以下是详细解释和示例代码:
Fibonacci数列的数学表达式为:
F(0) = 0
F(1) = 1
F(n) = F(n-1) + F(n-2) (n ≥ 2)
计算前n
项的和即对F(0)
到F(n-1)
累加。
def fibonacci(n)
n <= 1 ? n : fibonacci(n - 1) + fibonacci(n - 2)
end
def fibonacci_sum(n)
(0..n).sum { |i| fibonacci(i) }
end
# 示例:计算前10项和
puts fibonacci_sum(10) # 输出 143
缺点:递归存在重复计算,时间复杂度为O(2^n),仅适合小规模n
。
def fibonacci_sum(n)
return 0 if n < 0
a, b, sum = 0, 1, 0
(n + 1).times do
sum += a
a, b = b, a + b
end
sum
end
# 示例
puts fibonacci_sum(10) # 输出 143
优势:时间复杂度O(n),空间复杂度O(1),适合大规模计算。
def fibonacci_sum(n, cache = {})
cache[0] = 0
cache[1] = 1
sum = 0
(0..n).each do |i|
cache[i] ||= cache[i - 1] + cache[i - 2]
sum += cache[i]
end
sum
end
puts fibonacci_sum(10) # 输出 143
优势:避免重复计算,适合多次调用场景。
原因:递归深度过大(如n > 1000
)。
解决:改用迭代或尾递归优化(需Ruby支持)。
原因:Ruby的Integer
自动扩展,但其他语言可能需处理大数。
解决:使用BigDecimal
或语言特定的大数库。
Fibonacci数列前n
项和公式:
Sum = F(n+2) - 1
Ruby实现:
def fast_fib_sum(n)
return 0 if n < 0
a, b = 0, 1
(n + 2).times { a, b = b, a + b }
a - 1
end
puts fast_fib_sum(10) # 输出 143
优势:计算更快(仍为O(n)),但需理解数学原理。
以上方法可根据实际需求选择,迭代法是通用推荐方案。
没有搜到相关的文章