当前位置: 首页 > 编程笔记 >

Java递归算法详解(动力节点整理)

钦楚青
2023-03-14
本文向大家介绍Java递归算法详解(动力节点整理),包括了Java递归算法详解(动力节点整理)的使用技巧和注意事项,需要的朋友参考一下

递归算法是一种直接或者间接调用自身函数或者方法的算法。Java递归算法是基于Java语言实现的递归算法。递归算法的实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法来表示问题的解。递归算法对解决一大类问题很有效,它可以使算法简洁和易于理解。

   递归算法解决问题的特点:

    1)递归就是方法里调用自身。

  2) 在使用递增归策略时,必须有一个明确的递归结束条件,称为递归出口。

  3)递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。

  4)在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等,所以一般不提倡用递归算法设计程序。

 递归算法所体现的“重复”一般有三个要求:

  一是每次调用在规模上都有所缩小(通常是减半);

  二是相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入);

  三是在问题的规模极小时必须用直接给出解答而不再进行递归调用,因而每次递归调用都是有条件的(以规模未达到直接解答的大小为条件),无条件递归调用将会成为死循环而不能正常结束。

    为了理解递归算法,现举一个实例说明如下:

        问题描述:

求解Fibonacci数列的第10个位置的值?(斐波纳契数列(Fibonacci Sequence),又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*))

       Java代码清单:

package com.bjpowernode.test; 
 
 public classFab { 
 
 public static void main(String args[]){ 
 System.out.println(fab(5)); 
 } 
 private static int fab(int index){ 
 if(index==1 || index==2){ 
  return 1; 
 }else{ 
  return fab(index-1)+fab(index-2); 
 } 
 } 
 } 

        程序分析:

                这个实例是非常经典的实例,主要是利用递归实现了Fibonacci数列。这个递归算法的出口是在

 if(index==1 || index==2){ 
 return 1; 
 }

              这个代码段上,如果程序的index符合条件就会停止进行递归。所以这个程序的运行流程是:

程序分析到这里,递归的实现也就完成了,读者可以自己简单的做个demo,感受一下这个算法的精妙之处,其实很多人都在说算法难,难于上青天,其实掌握算法的根才是最重要的,什么是算法的根呢,就拿这个递归算法来说吧,我感觉这个根就是那个出口,只要找到这个出口所在,那么算法自然而然就能水到渠成了。

以上所述是小编给大家介绍的Java递归算法详解(动力节点整理),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库html" target="_blank">网站的支持!

 类似资料:
  • 本文向大家介绍Java System类详解_动力节点Java学院整理,包括了Java System类详解_动力节点Java学院整理的使用技巧和注意事项,需要的朋友参考一下 System类是jdk提供的一个工具类,有final修饰,不可继承,由名字可以看出来,其中的操作多数和系统相关。其功能主要如下: • 标准输入输出,如out、in、err • 外部定义的属性和环境变量的访问,如getenv()/

  • 本文向大家介绍Java异常详解_动力节点Java学院整理,包括了Java异常详解_动力节点Java学院整理的使用技巧和注意事项,需要的朋友参考一下 什么是异常? 异常是Java语言中的一部分,它代表程序中由各种原因引起的“不正常”因素。 那么在程序中什么样的情况才算不正常呢? 我认为可以这样定义:如果出现了这么一种情况,它打断了程序期望的执行流程,改变了控制流的方向(包括让JVM停掉),那么就可以

  • 本文向大家介绍TCP协议详解_动力节点Java学院整理,包括了TCP协议详解_动力节点Java学院整理的使用技巧和注意事项,需要的朋友参考一下 本文描述了TCP协议,首先简单介绍了TCP完成了一些什么功能;介绍了TCP报文格式,以及典型报文的数据格式;接着从链路控制和数据传输两个方面进行了介绍,在TCP中链路控制和数据传输是通过同一个通道进行的,并没有区分控制通道和数据通道;在网络中传输数据(控制

  • 本文向大家介绍Java递归读取文件例子_动力节点Java学院整理,包括了Java递归读取文件例子_动力节点Java学院整理的使用技巧和注意事项,需要的朋友参考一下 Java递归列出目录下全部文件  以上所述是小编给大家介绍的Java递归读取文件例子,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对呐喊教程网站的支持!

  • 本文向大家介绍Java构造方法实例详解(动力节点java学院整理),包括了Java构造方法实例详解(动力节点java学院整理)的使用技巧和注意事项,需要的朋友参考一下 构造函数是一种特殊的函数。其主要功能是用来在创建对象时初始化对象, 即为v对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。构造函数与类名相同,可重载多个不同的构造函数。在JAVA语言中,构造函数与C++语言中的构造

  • 本文向大家介绍Spring MVC之DispatcherServlet详解_动力节点Java学院整理,包括了Spring MVC之DispatcherServlet详解_动力节点Java学院整理的使用技巧和注意事项,需要的朋友参考一下 DispatcherServlet作用 DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,而且负责职责的分