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

java递归算法详解_Java递归算法详解(动力节点整理)递归算法是一种直接或者间接调用自身函数或者方法的算法 Java 递归算法是基于 Java 语言实现的递归算法 递归算法的实质是把问题分解成规模缩小的同类问题的子问题 然后递归调用方法来表示问题的解 递归算法对解决一大类问题很有效 它可以使算法简洁和易于理解 递归算法解决问题的特点 1 递归就是方法里调用自身 2 在使用递增归策略时 必须有一个明确的递归结束条件 称为递归出口 3 递归算法解题通常显得很

递归算法是一种直接或者间接调用自身函数或者方法的算法。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符合条件就会停止进行递归。所以这个程序的运行流程是:

72851987cda84e98a88b2fbbe6441859.png

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233916.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 日期函数months_between的用法[通俗易懂]

    日期函数months_between的用法[通俗易懂]MONTHS_BETWEEN(date1,date2)用于计算date1和date2之间有几个月。如果date1在日历中比date2晚,那么MONTHS_BETWEEN()就返回一个正数。如果date1在日历中比date2早,那么MONTHS_BETWEEN()就返回一个负数。如果date1和date2日期一样,那么MONTHS_BET…

    2022年7月12日
    30
  • 串口db9接口定义_db9串口定义及颜色

    串口db9接口定义_db9串口定义及颜色这个接头都是以公头为准,所有接头还是以公头去记.RS-232端(DB9公头/针型)引脚定义2:RXD3:TXD5:GND1/4/6:内部相链接7/8:内部相链接1.RS-232端(D

    2022年8月6日
    6
  • FileSystemWatcher 用法

    FileSystemWatcher 用法1.FileSystemWatcher基础在应用FileSystemWatcher对象之前,必须了解这个对象的一些基本属性和事件。毫无疑问,这个对象的最重要的属性为“EnableRaisingEvents”属性。这个属性决定对象在收到改变通知时是否提交事件。如果EnableRaisingEvents属性设为假,对象将不会提交改变事件。如果设为真,它将提交改变事件。下面是在应用FileSys

    2022年6月17日
    21
  • JDBC连接数据库6个步骤

    JDBC连接数据库6个步骤JDBC连接数据库,创建一个以JDBC连接数据库的程序,包含7个步骤:   首先准备JDBC所需的四个参数(user,password,url,driverClass)(1)user用户名(2)password密码(3)URL定义了连接数据库时的协议、子协议、数据源标识,它们之间用冒号隔开。  书写形式:  协议:子协议:数据源标识       协议:在JDBC中总是以jdb…

    2022年7月12日
    16
  • android ScaleType详解

    android ScaleType详解转载自http://blog.csdn.net/larryl2003/article/details/6919513

    2022年6月21日
    34
  • 区块链每日快讯(0122)[通俗易懂]

    区块链每日快讯(0122)

    2022年3月13日
    56

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号