剑指offer----斐波那契数列的实现--递归和迭代

1、定义

斐波那契数列指的是这样一个数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144,…这个数列从第三项开始,每一项都等于前两项之和。

在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0F1=1Fn=Fn-1+Fn-2n>=2n∈N*),

2、递归实现

  递归满足2个条件:

    1)有反复执行的过程(调用自身)

2)有跳出反复执行过程的条件(递归出口)

缺点:时间复杂度太大,随着n的增大,运算时间将会急剧增加,递归太深容易造成堆栈的溢出。除了最后一个数,每个数都被重复计算若干次。

优点:程序调用自身的编程技巧,大问题化为小问题,可以极大的减少代码量,代码简洁清晰,可读性更好,

3、迭代实现

利用变量的原值推算出变量的一个新值,迭代效率高,运行时间因循环次数增加而增加,代码不如递归简洁,编写复杂问题时困难。

</pre><pre name="code" class="java">public class Fabonacci
{
   public static void main(String[] args)
  {
    int n = 10;
    System.out.println(fab_recursion(n));
    System.out.println(fab_iteration(n));

  }
   
   //递归
   public static int fab_recursion(int n)
 {
	   if(n==0 || n == 1)
	   {
		   return n;
	   }
	   else
	   {
		   return fab_recursion(n-1)+fab_recursion(n-2);
	   }
	  
}
   
 //迭代
 static int fab_iteration(int n)
{   
	int first = 0;
	int second = 1;
	int result = 0;   
   if(n == 1 || n == 0)  
   { 
	   return n;
   }
  else
  {
      for(int i = 2; i <= n; i++)
     {
	   result = first + second;
	   first = second;
	   second = result;
     }  	  
     return result; 
  }
 }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值