递归函数,即是调用一个函数的过程中出现直接或简介的调用该函数本身.此种函数就称为递归函数

递归函数的优点是程序简洁易懂,可读性强;缺点是需要调用大量的函数调用,消耗大量的内存和时间

一般来说,递归由函数出口和递归体两部分组成,递归出口给出了递归终止条件,递归体给出了递归的方式.

下面一例就是简单的递归:

求N的阶乘,即求1乘2乘3一直乘到N的乘积.

递归形式如下:

f(1)=1

f(n)=f(n-1)*n

前者就是递归的出口,后者就是递归体

程序执行过程为:求f(4)反推到f(3),再反推到f(3),接着反推到f(2),最后反推到f(1),此时遇到递归出口,计算出f(1)=1,然后依次反推.f(2)=2*f(1)=2,f(3)=3*f(2)=3*2=6,f(4)=4*f(3)=4*6=24

程序代码实现:

import javax.swing.JOptionPane;

public class N {

static int f(int x){

int s;

if(x==1)

s=1;

else

s=f(x-1)*x;

return s;

}

public static void main(String[] args) {

int n;

N f=new N();

String s=JOptionPane.showInputDialog(null,"please input n:\n");

n=Integer.parseInt(s);

System.out.print(N.f(n));

}

}

下面是一个很典型的递归解决的问题,如果用其他方法编写,代码将很繁琐

汉罗塔问题:有N个大小不同的盘片放在A柱上(小的在上,大的在下),另有BC两柱.要求将这N个盘片从A搬到C上,搬动中,每次只能搬动一个盘片,而且小盘片不能放在大盘片之下

程序思想:假如要移动N个盘片,如果能先将上面的N-1个盘片从A借助C移到B上,那么再将最后那个盘片移到C上,然后在把N-1个盘片从B借助A移到C上,那么就行了

代码如下

import javax.swing.JOptionPane;

public class Hanio {

static void nuodong(int n,char A,char B,char C){

if(n==1)

System.out.print("move"+n+"from"+A+"to"+C+"\n");

else{

nuodong(n-1,A,C,B);

System.out.print("move"+n+"from"+A+"to"+C+"\n");

nuodong(n-1,B,A,C);

}

}

public static void main(String[] args) {

int n;

String s=JOptionPane.showInputDialog(null,"please input n:\n");

n=Integer.parseInt(s);

char A='A',B='B',C='C';

Hanio h=new Hanio();

Hanio.nuodong(n,A,B,C);

}

}

下面这个斐波那契数列也是用递归实现的(摘抄自其他网站)

斐波那契数列问题:列第n项,斐波那契数列第一和第二项是1,后面每一项是前两项之和,即1、1、2、3、5、8、13

import javax.swing.JOptionPane;

public class Fibonacci

{

int F(int n)

{

if(n==0)

return 1;

else if(n==1)

return 1;

else if(n>1)

return F(n-1)+F(n-2); /*递归*/

else

JOptionPane.showMessageDialog(null,"方程无解!");

return 0;

}

public static void main(String[] args)

{

int i,n,m;

Fibonacci f=new Fibonacci();

String s=JOptionPane.showInputDialog(null,"please input n:\n");

n=Integer.parseInt(s);

for(i=0;i<=n;i++)

{

m=f.F(i);

System.out.println(m);

}

}

}

java 递归终止_java关于递归相关推荐

  1. java 递归终止_java中执行程序如何终止递归?

    这是一个程序,读取信息网站为以前的格式,它使用递归和executor.It工作正常,我的问题是测试程序是否完成和成功通知.java中执行程序如何终止递归? public class NewClass ...

  2. java 递归原理_Java中递归原理实例分析

    本文实例分析了Java中递归原理.分享给大家供大家参考.具体分析如下: 解释:程序调用自身的编程技巧叫做递归. 程序调用自身的编程技巧称为递归( recursion).递归做为一种算法在程序设计语言中 ...

  3. java角谷_java实现递归设计——数鸭子和角谷定理

    java实现递归设计--数鸭子和角谷定理 java实现递归设计--数鸭子和角谷定理 一 .题目分析 题目一:一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只.这样他经过了七个村子后还 ...

  4. java输出钻石_Java:递归打印钻石

    如果给定大小,你将如何使用Java递归打印钻石? 大小为5会产生: ***** ***** **** **** *** *** ** ** * * * * ** ** *** *** **** *** ...

  5. java递归统计_Java类递归计数

    Class.isAssignableFrom();执行运行时的检查,以校验传递的对象确实属于我们感兴趣的继承结构. 统计基类和确切类型个数.import java.util.HashMap; impo ...

  6. java 递归_Java的递归、如何与流相结合

    递归技术 需求:扫描D:est所有子文件夹及子子文件夹下的.jpg文件. 我们如果用循环来做这件事,我们不知道循环的结束条件,也不知道到底有多少层,所以比较麻烦. 我们可以用一种新的思想:递归. 递归 ...

  7. java 文件 递归_JAVA实现遍历文件夹下的所有文件(递归调用和非递归调用)

    JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = ...

  8. java 全局变量 跳出递归循环_Java技术知识点的一些总结

    边学习边记录,对于程序员来说真的是一个很好的学习习惯,下面是近期在学习java时总结的一些技术知识点. 第一讲,主要是Java环境变量的配置.搭建好环境才能干活.要理解什么是编译.什么是运行.编译是j ...

  9. java怎么递归_Java的递归、如何与流相结合

    递归技术 需求:扫描D:\test所有子文件夹及子子文件夹下的.jpg文件. 我们如果用循环来做这件事,我们不知道循环的结束条件,也不知道到底有多少层,所以比较麻烦. 我们可以用一种新的思想:递归. ...

最新文章

  1. MySQL 处理海量数据时的一些优化查询速度方法
  2. udp计算机dll,Udp_SocketBll.dll
  3. 8080端口被占用bug解决办法
  4. event事件的坐标 offsetWidth client scroll
  5. LADRC的学习——PID的学习
  6. 算法:Invert Binary Tree(翻转二叉树)
  7. 浅析全息技术通信方案和产业现状
  8. 软件测试人员能力模型
  9. CRM系统管理日常计划
  10. 【Unity 粒子系统】Lifetime Speed 相关
  11. 【Python案例】Python实现垃圾分类APP(附带微信小程序)
  12. Idea 去掉 mapper.xml 文件的黄色、淡绿色警告(Windows、Mac)
  13. 【评测】iPS细胞相关实验服务机构-魔法师的仓库
  14. java版文本切割器
  15. python数字转中文大写_python3 数字转人民币大写
  16. 计算机课忘记签到,有定时提醒大学生上网课签到的提醒便签软件吗?
  17. django 数据库迁移(migrate)
  18. 【SOP 】配电网故障重构方法研究【IEEE33节点】(Matlab代码实现)
  19. 用友突然不能建立跟应用服务器,解决用友:不能建立跟应用服务器(xxx机器名)所指向的数据库服务器连接...
  20. ChatGPT加持下的微软New Bing 错误频出,别只骂谷歌的Bard了

热门文章

  1. OSChina 娱乐弹弹弹——人怕出名猪怕壮,红薯出名会怎样?
  2. HTML和JSP区别
  3. 新发的日常小实验——VS 2019~2010小助手(Visual Assist X / VA_X)安装与使用(实测可用)
  4. 学会使用交互式命令行
  5. WIFI的三种加密方式
  6. 苹果持续回调做多注意节奏,橡胶认购大涨,YP再创新低2022.4.18
  7. python语言中不属于组合数据类型的是_python的基本语法(组合数据类型),基础...
  8. wap之wtai协议
  9. java 读取apk_readApk 读取apk安装包的各种信息,帮助java后台开发者,并提供方便 Develop 238万源代码下载- www.pudn.com...
  10. mx3 android6,魅族Flyme6全面推送!网友升级后傻了:竟还是安卓5.1