fib()

fib() :递归

fib(n)=fib(n-1)+fib(n-2) : {0,1,1,2,3,5,8…}

int fib(n)  
{
   return (2>n) ? n : fib(n-1)+fib(n-2);
}

复杂度:
T ( 0 ) = T ( 1 ) = 1 ; T ( n ) = T ( n − 1 ) + T ( n − 2 ) + 1 ; T(0)=T(1)=1; T(n)=T(n-1)+T(n-2)+1; T(0)=T(1)=1;T(n)=T(n1)+T(n2)+1;

S ( n ) = [ T ( n ) + 1 ] / 2 S(n)=[T(n)+1]/2 S(n)=[T(n)+1]/2

S ( 0 ) = 1 = f i b ( 1 ) , S ( 1 ) = 1 = f i b ( 2 ) S(0)=1=fib(1),S(1)=1=fib(2) S(0)=1=fib(1),S(1)=1=fib(2)

S ( n ) = S ( n − 1 ) + S ( n − 2 ) = f i b ( n + 1 ) S(n)=S(n-1)+S(n-2)=fib(n+1) S(n)=S(n1)+S(n2)=fib(n+1)

T ( n ) = 2 ∗ S ( n ) − 1 = 2 ∗ f i b ( n + 1 ) − 1 = O ( f i b ( n + 1 ) ) = O ( ∅ n ) T(n)=2*S(n)-1=2*fib(n+1)-1=O(fib(n+1))=O(\emptyset^n) T(n)=2S(n)1=2fib(n+1)1=O(fib(n+1))=O(n)

其中
∅ = ( 1 + 5 ) / 2 ≈ 1.618 \emptyset=(1+\sqrt5)/2\approx1.618 =(1+5 )/21.618
在这里插入图片描述

fib() :动态规划

颠倒计算方向:由自顶而下递归,改为自低而上迭代

f=1;g=0;  //fib(-1),fib(0)
while(0<n--)
{
    g=g+f;
    f=g-f;
}
return g;

算法复杂度:
T ( n ) = O ( n ) , 而 且 仅 需 要 O ( 1 ) 空 间 T(n)=O(n),而且仅需要O(1)空间 T(n)=O(n),O(1)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
12-28 175

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值