Java 递归,斐波那契数列

程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。——这是百度百科说的。

其实说白了,就是递归方法本身调用自己而进行的运算,下面举个例子说明一下这个例子就是很著名的——斐波那契数列。

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368……

可以看出来第三个数就是前面两个数相加从而得到的。

如果使用正常的循环进行解决的话就是这样:

public class FeiBo{

    public static void main(String[] args) {

        int num1=0;

        int num2=1;

        int numn=1;

        int n=10;

        for (int i = 3; i <=n; i++) {

            numn=num1+num2;

            num1=num2;

            num2=numn;

        }

        System.err.println(n+"个数的结果为:"+numn);

    }

}


如果使用递归的话就是一下这样:


public class Demo {          

    public static int f(int n) throws Exception {          

    if(n==0){             

throw new Exception("参数错误!");         

 }         

     if (n == 1 || n == 2) {             

     return 1;          

} else {              

    return f(n-1)+f(n-2);//自己调用自己          }   

}          

public static void main(String[] args) throws Exception {        

      for (int i = 1; i <=10; i++) {          

    System.out.print(f(i)+" ");        

  }   

   }    }  



递归需要结束条件,到情况下递归就不需要继续调用,结束递归。上面案例结束条件就是当n=1或者2的时候,就返回0或者1,而不是继续调用递归方法本身了。

递归最主要的两个条件就是,自己调用自己,结束递归的条件。

因为递归是自己调用自己所以浪费资源大,运行时间比循环长很多,运行慢,效率底。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Scala与Java的关系 Scala与Java的关系是非常紧密的!! 因为Scala是基于Java虚拟机,也就是...
    灯火gg阅读 8,827评论 1 24
  • 第01章 JAVA简介第02章 基础语法第02章 递归补充第03章 面向对象第04章 异常处理第05章 数组第06...
    顺毛阅读 3,446评论 0 1
  • 第1章 第一个C程序第2章 C语言基础第3章 变量和数据类型第4章 顺序结构程序设计第5章 条件结构程序设计第6章...
    小狮子365阅读 13,649评论 3 71
  • 皮炎和湿疹常作为同义词用来指一种皮肤炎症,代表皮肤对于化学制剂、蛋白、细菌与真菌等种种物质的变应性反应。湿疹一词没...
    北京各种病历讲解与预防阅读 1,904评论 0 0
  • 生日这一天,总想有所不同。本已做出不去上班的打算。然而一觉醒来,七点钟便发出了一个简讯安排工作。起床时,下意识的穿...
    红姐的人生述说阅读 2,669评论 1 1