1. 递归, 时间复杂度为指数类型,调用太深,容易堆栈溢出
def fibonacci(n)
if n == 0 || n == 1
return 1
else
return fibonacci(n-1) + fibonacci(n-2)
end
end
2. 循环,一般通用解法,规避递归,时间复杂度O(N)
def fibonacci2(n)
if n == 0 || n == 1
return 1
else
result1 = 1
result2 = 1
(2 .. n).each do |i|
result_temp = result2
result2 = result2 + result1
result1 = result_temp
end
return result2
end
end
3. f(n) = f(n -1) + f(n -2) 这个方程式可以解出f(n) 的, 具体解法参考组合数学引论, 下面算的时间复杂度为O(1)
def fibonacci3(n)
return (1/Math.sqrt(5))*(((1 + Math.sqrt(5))/2)**(n + 1)) - (1/Math.sqrt(5))*(((1 - Math.sqrt(5))/2)**(n + 1))
end
以上三个的算法时间都是ruby ,可以复制后直接运行