【发布时间】:2014-01-10 12:17:32
【问题描述】:
我进行了一个实验来计算递归与迭代斐波那契数列的时间。有没有更好的方法来提高我的递归方法的性能?
require 'benchmark'
def fibonacci_iterative(n)
fib_numbers = [0, 1]
iterate = n-1
iterate.times do
number = fib_numbers[-2] + fib_numbers[-1]
fib_numbers << number
end
p fib_numbers[-1]
end
def fibonacci_recursive(n)
fib_number = 0
if n == 0 || n == 1
n
else
fib_number = fibonacci_recursive(n - 1) + fibonacci_recursive(n - 2)
end
end
puts Benchmark.measure {fibonacci_iterative(5)}
puts Benchmark.measure {fibonacci_recursive(5)}
5
0.000000 0.000000 0.000000 ( 0.000037)
0.000000 0.000000 0.000000 ( 0.000005)
puts Benchmark.measure {fibonacci_iterative(45)}
puts Benchmark.measure {fibonacci_recursive(45)}
1134903170
0.000000 0.000000 0.000000 ( 0.000039)
378.990000 0.330000 379.320000 (379.577337)
这是递归的固有特性吗?
【问题讨论】:
-
@DavidNehme 示例是 Java,而不是 Ruby。
标签: ruby optimization recursion fibonacci