解决斐波纳契数的递归问题

时间:2010-03-01 01:08:17

标签: algorithm fibonacci

我不知道这个算法中的数学,可以使用一些帮助。

算法:

if n<2 then

  return n

else return fibonacci(n-1) + fibonacci(n-2)

声明

n&lt; 2是O(1)
时间n> = 2是O(1)
返回n是O(1) 时间n> = 2是 - 返回fib(n-1)+ fib(n-2)是 -

且时间n> = 2是T(n-1)+ T(n-2)+ O(1)

总计:O(1)T(n-1)+ T(n-2)+ O(1)
如果n <1,则T(n)= O(1)。 2
如果n> = 2,则T(n)= T(n-1)+ T(n-2)+ O(1)

3 个答案:

答案 0 :(得分:4)

我认为你应该注意到这个函数的递归关系非常熟悉。通过按名称查找,您可以准确了解非常熟悉的重现的增长速度。

但是,如果您没有实现直观的飞跃,您可以尝试使用简化的问题绑定运行时。实质上,您可以通过保证增加运行时的方式修改算法,同时使其更简单。然后你弄清楚新算法的运行时间,它给你一个上限。

例如,此算法必须花费更长时间并且分析起来更简单:

F(n): if n<2 then return n else return F(n-1) + F(n-1)

答案 1 :(得分:3)

通过归纳:如果fib(k)的计算对于所有C*2^k的{​​{1}}小于k < n,则对于fib(n)的计算大小我们已经

T(n) = T(n-1) + T(n-2) + K < C*2^(n-1) + С*2^(n-2) + K
     = 0.75*C*2^n + K < C*2^n

足够大CC > K/0.252^n > 1)。这证明T(n) < C*2^n,即T(n) = O(2^n)

(此处T(n)是计算fib(n)的时间,Kfib(n)和{{1}时计算fib(n-1)所需的常量时间已经[已经]计算了。)

答案 2 :(得分:0)

你需要解决递推方程:

T(0) = 1
T(1) = 1
T(n) = T(n-1) + T(n-2), for all n > 1