我跑了一个实验来计算递归与迭代斐波那契序列的时间。有没有更好的方法来改善递归方法的性能?优化递归搜索
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的不是。 –