Java递归实现斐波那契数列

作者:王立平的博客 时间:2022-05-03 19:00:11 

程序调用自身的编程技巧称为递归( 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);
 }
}

运行结果为:

10个数的结果为:34

这是使用正常的循环方法进行运算,如果使用递归的话就是一下这样:


public static int Recursion(int n){

if(n==1){
     return 0;
   }

if(n==2){
     return 1;
   }
   return Recursion(n-1)+Recursion(n-2);
 }

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

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

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

来源:http://blog.csdn.net/qq_37131111/article/details/54691749

标签:Java,递归,斐波那契数列
0
投稿

猜你喜欢

  • Swagger实现动态条件注入与全局拦截功能详细流程

    2023-11-23 13:41:05
  • 解决idea爆红 cant resolve symbol String的问题解析

    2023-10-11 10:47:30
  • Java 中的 clone( ) 和 new哪个效率更高

    2023-11-09 05:27:44
  • Java深入了解数据结构之二叉搜索树增 插 删 创详解

    2023-02-14 08:08:00
  • 详解Android的.aar文件生成方法以及使用技巧

    2023-08-06 06:43:20
  • Java虚拟机JVM性能优化(三):垃圾收集详解

    2021-10-16 10:38:49
  • C#启动进程的几种常用方法

    2023-06-18 04:13:48
  • JAVA操作MongoDB数据库实例教程

    2023-11-18 13:22:27
  • Java并发的CAS原理与ABA问题的讲解

    2023-11-25 12:17:21
  • 优化MyBatis配置文件中的配置详解

    2023-11-10 14:03:51
  • 一次排查@CacheEvict注解失效的经历及解决

    2023-11-13 12:07:23
  • Flutter图片缓存管理ImageCache原理分析

    2023-08-20 23:26:19
  • spring boot基于Java的容器配置讲解

    2023-11-09 05:24:54
  • C语言高效编程的几招小技巧

    2023-11-02 14:12:50
  • java中fork-join的原理解析

    2023-12-13 08:49:16
  • Java实现经典游戏打砖块游戏的示例代码

    2021-06-25 13:30:16
  • mybatis-plus查询源码详解

    2023-02-02 11:58:02
  • java创建子类对象设置并调用父类的变量操作

    2023-10-13 18:16:13
  • Spring Security实现自动登陆功能示例

    2023-01-29 15:31:55
  • SpringBoot利用限速器RateLimiter实现单机限流的示例代码

    2023-04-05 19:57:50
  • asp之家 软件编程 m.aspxhome.com