算法篇——斐波那契数列第N项的多种解决方式:递归,非递归,尾递归

  1
  2 递归算法的时间复杂度:递归的总次数*每次递归的数量。
  3 
  4 递归算法的空间复杂度:递归的深度*每次递归创建变量的个数。
  5 
  6 //fib的三种实现方式
  7 
  8 
  9 #include<stdio.h>
 10 
 11 //递归的方式      
 12 int  fib_1(int n)
 13 {
 14     if (n<3)
 15         return 1;
 16 
 17     else
 18         return fib(n-1)+fib(n-2);
 19 
 20 
 21 
 22 
 23     }
 24 
 25 //非递归的方式
 26 int fib_2(int n )
 27 {
 28     int first=1;
 29     int second=1;
 30     if(n<3)
 31         return 1;
 32     else
 33      {
 34          int i=n;
 35          for(;i>2;--i)
 36         {
 37          int tmp=first;
 39          first=second;
 40          second=tmp+second;
 41          }
 42          return second;
 43     }
 44 
 45 
 46     }
 47 
 48 
 49 
 50 //尾递归的方式:first second传1;
 51 int fib_3(int first,int second,int n)
 52 {
 53 
 54     if(n<3)
 55     return 1;
 56 
 57     if(n==3)
 58     return first+second;
 59  
 60     first=second; 
 62     second=first+second;
 63     return fib_3(first,second,n-1);
 64    }

测试用例:

int main()
{
  int ret_1=fib_1(5);
  int ret_2=fib_2(5);
  int ret_3=fib_3(1,1,5);

  printf("%d  ",ret_1);
  printf("%d  ",ret_1);
  printf("%d  ",ret_1);
  return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拥抱@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值