本文实例分析了Java中递归原理。分享给大家供大家参考。具体分析如下:

解释:程序调用自身的编程技巧叫做递归。

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

递归的三个条件:

边界条件

递归前进段

递归返回段

当边界条件不满足时,递归前进;当边界条件满足时,递归返回。

下面通过两个示例程序来说明:

使用java代码求5的阶乘。(5的阶乘=5*4*3*2*1)

/**

* 计算5的阶乘(result = 5*4*3*2*1)

* @author pplsunny

*

*

*/

public class Test01 {

public static void main(String[] args) {

System.out.println(f(5));

}

public static int f(int n) {

if (1 == n)

return 1;

else

return n*(n-1);

}

}

此题中,按照递归的三个条件来分析:

(1)边界条件:阶乘,乘到最后一个数,即1的时候,返回1,程序执行到底;

(2)递归前进段:当前的参数不等于1的时候,继续调用自身;

(3)递归返回段:从最大的数开始乘,如果当前参数是5,那么就是5*4,即5*(5-1),即n*(n-1)

使用Java代码求数列:1,1,2,3,5,8......第40位的数

/**

* 求数列:1,1,2,3,5,8......第40位的数

* @author pplsunny

*

*/

public class Test_Fibonacci {

public static void main(String[] args) {

System.out.println(f(6));

}

public static int f(int n ) {

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

return 1;

else

return f(n-1) + f(n-2);

}

}

此题的突破口在:从第3位数开始,本位数是前两位数的和。要计算第多少位的值,那么就需要将位数作为参数传进方法进行计算。

(1)首先,当位数为1和2时,当前返回的值应该是1;

(2)然后,当位数为3时,返回值应该=2=1+1;

当位数为4时,返回值=3=2+1;

当位数为5时,返回值=5=3+2;

当位数为6时,返回值=8=5+3;

......

(3)由(2)得知,大于等于3的情况下,当前位数(n)的数值=f(n-1)+f(n-2)

心得:有些初学者可能认为递归即是自己调用自己,那岂不是死循环了。对,如果递归写的不合理,那就是死循环了。但是如果写的合理,加上“边界条件”,程序执行到底的时候,会逐层返回。就像我们爬山一样,我们绕着山路爬上一层又一层,如果没有山顶,我们会一直往上爬。但如果到了山顶,就按照上山时候的步骤一层一层的往下爬。

希望本文所述对大家的java程序设计有所帮助。

java 递归原理_Java中递归原理实例分析相关推荐

  1. file java详解_Java中File的实例详解

    Java中File的实例详解 File 代表文件或者目录的类 构造函数 File(File parent,String child)---代表了指定父目录下的指定的子文件或者子目录 File(Stri ...

  2. java 线程不安全例子_Java中多线程安全问题实例分析

    案例package com.duyang.thread.basic.basethread; /** * @author :jiaolian * @date :Created in 2020-12-16 ...

  3. java filter 回调_Java 异步回调机制实例分析

    Java 异步回调机制 一.什么是回调 回调,回调.要先有调用,才有调用者和被调用者之间的回调.所以在百度百科中是这样的: 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用 ...

  4. java 自定义标签_Java自定义标签用法实例分析

    本文实例讲述了Java自定义标签用法.分享给大家供大家参考,具体如下: 简单例子 实现一个标签分为两步:(1)继承SimpleTagSupport或TagSupport实现一个控制器(2)创建一个描述 ...

  5. Android开发中StackOverflowError错误实例分析

    http://blog.csdn.net/mozhizun/article/details/7051300 http://blog.csdn.net/gaomatrix/article/details ...

  6. java中匿名内部类详解_java 中匿名内部类的实例详解

    搜索热词 java 中匿名内部类的实例详解 原来的面貌: class TT extends Test{ void show() { System.out.println(s+"~~~哈哈&q ...

  7. JAVA中console方法怎么用_Java中Console对象实例代码

    Java中Console对象实例代码 发布于 2020-12-20| 复制链接 摘记: 在JDK 6中新增了java.io.Console类,可以让您取得字节为基础的主控台装置,例如,您可以藉由Sys ...

  8. java 自定义正则表达式_java中正则表达式实例详解

    Java中正则表达式运用实例(参看java中正则表达式运用详解): 测试代码 package test; /** * 在String的matches()方法,split()方法中使用正则表达式. * ...

  9. java list 移除_java 中List删除实例详解

    java 中List删除实例详解 1.循环删除List中的元素 public static void main(String[] args) { List t=new ArrayList(); for ...

最新文章

  1. ATS中的命令行工具解读
  2. 四十八、减少磁盘延迟时间的方法
  3. 关于 automation服务器对象不能创建
  4. python入门练习题-Python简单新手入门练习题
  5. DedeCms模板防盗的方法
  6. 华为策略路由加等价路由_华为——防火墙——策略路由配置及思路
  7. python 调用 C++ code
  8. mysql怎么进行删除操作_利用PHP怎么对MySQL数据库进行删除操作
  9. 复习Javascript专题(三):面向对象(对象的创建与继承,原型及原型链)
  10. abb变频器dp适配器说明书_ABB变频器ACS510_CN使用说明书.pdf
  11. 高分六号WFV预处理详细步骤(辐射校正、大气校正、几何校正)
  12. “外行”带你看国标38900-2020(一)
  13. 多道程序设计有哪些新特性呢?它又是如何实现程序的并发执行的呢?
  14. php接入aws短信,亚马逊短信(AWS-SMS)
  15. xenu死链接工具使用
  16. 分布式系统时钟同步方案
  17. 泛在操作系统实践案例
  18. python re subn_python中的正则re.sub re.subn
  19. 拉里·埃里森和历史上最牛的演讲
  20. JAVA社交平台项目第四天 消息通知系统

热门文章

  1. Java并发教程(Oracle官方资料)
  2. 最近跑hadoop遇到的一些问题
  3. I2C总线学习(四)--读写过程
  4. java开发环境搭建(重点)
  5. Qt vlc视频开发libvlc_new返回空的问题
  6. .net平台的rabbitmq使用封装
  7. JSON,java对象转json
  8. Hibernate中的数据库方言(Dialect)
  9. binary search完整笔记
  10. 【转】【Android】使用BaseAdapter实现复杂的ListView