java 递归终止_java关于递归
递归函数,即是调用一个函数的过程中出现直接或简介的调用该函数本身.此种函数就称为递归函数
递归函数的优点是程序简洁易懂,可读性强;缺点是需要调用大量的函数调用,消耗大量的内存和时间
一般来说,递归由函数出口和递归体两部分组成,递归出口给出了递归终止条件,递归体给出了递归的方式.
下面一例就是简单的递归:
求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关于递归相关推荐
- java 递归终止_java中执行程序如何终止递归?
这是一个程序,读取信息网站为以前的格式,它使用递归和executor.It工作正常,我的问题是测试程序是否完成和成功通知.java中执行程序如何终止递归? public class NewClass ...
- java 递归原理_Java中递归原理实例分析
本文实例分析了Java中递归原理.分享给大家供大家参考.具体分析如下: 解释:程序调用自身的编程技巧叫做递归. 程序调用自身的编程技巧称为递归( recursion).递归做为一种算法在程序设计语言中 ...
- java角谷_java实现递归设计——数鸭子和角谷定理
java实现递归设计--数鸭子和角谷定理 java实现递归设计--数鸭子和角谷定理 一 .题目分析 题目一:一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只.这样他经过了七个村子后还 ...
- java输出钻石_Java:递归打印钻石
如果给定大小,你将如何使用Java递归打印钻石? 大小为5会产生: ***** ***** **** **** *** *** ** ** * * * * ** ** *** *** **** *** ...
- java递归统计_Java类递归计数
Class.isAssignableFrom();执行运行时的检查,以校验传递的对象确实属于我们感兴趣的继承结构. 统计基类和确切类型个数.import java.util.HashMap; impo ...
- java 递归_Java的递归、如何与流相结合
递归技术 需求:扫描D:est所有子文件夹及子子文件夹下的.jpg文件. 我们如果用循环来做这件事,我们不知道循环的结束条件,也不知道到底有多少层,所以比较麻烦. 我们可以用一种新的思想:递归. 递归 ...
- java 文件 递归_JAVA实现遍历文件夹下的所有文件(递归调用和非递归调用)
JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = ...
- java 全局变量 跳出递归循环_Java技术知识点的一些总结
边学习边记录,对于程序员来说真的是一个很好的学习习惯,下面是近期在学习java时总结的一些技术知识点. 第一讲,主要是Java环境变量的配置.搭建好环境才能干活.要理解什么是编译.什么是运行.编译是j ...
- java怎么递归_Java的递归、如何与流相结合
递归技术 需求:扫描D:\test所有子文件夹及子子文件夹下的.jpg文件. 我们如果用循环来做这件事,我们不知道循环的结束条件,也不知道到底有多少层,所以比较麻烦. 我们可以用一种新的思想:递归. ...
最新文章
- MySQL 处理海量数据时的一些优化查询速度方法
- udp计算机dll,Udp_SocketBll.dll
- 8080端口被占用bug解决办法
- event事件的坐标 offsetWidth client scroll
- LADRC的学习——PID的学习
- 算法:Invert Binary Tree(翻转二叉树)
- 浅析全息技术通信方案和产业现状
- 软件测试人员能力模型
- CRM系统管理日常计划
- 【Unity 粒子系统】Lifetime Speed 相关
- 【Python案例】Python实现垃圾分类APP(附带微信小程序)
- Idea 去掉 mapper.xml 文件的黄色、淡绿色警告(Windows、Mac)
- 【评测】iPS细胞相关实验服务机构-魔法师的仓库
- java版文本切割器
- python数字转中文大写_python3 数字转人民币大写
- 计算机课忘记签到,有定时提醒大学生上网课签到的提醒便签软件吗?
- django 数据库迁移(migrate)
- 【SOP 】配电网故障重构方法研究【IEEE33节点】(Matlab代码实现)
- 用友突然不能建立跟应用服务器,解决用友:不能建立跟应用服务器(xxx机器名)所指向的数据库服务器连接...
- ChatGPT加持下的微软New Bing 错误频出,别只骂谷歌的Bard了
热门文章
- OSChina 娱乐弹弹弹——人怕出名猪怕壮,红薯出名会怎样?
- HTML和JSP区别
- 新发的日常小实验——VS 2019~2010小助手(Visual Assist X / VA_X)安装与使用(实测可用)
- 学会使用交互式命令行
- WIFI的三种加密方式
- 苹果持续回调做多注意节奏,橡胶认购大涨,YP再创新低2022.4.18
- python语言中不属于组合数据类型的是_python的基本语法(组合数据类型),基础...
- wap之wtai协议
- java 读取apk_readApk 读取apk安装包的各种信息,帮助java后台开发者,并提供方便 Develop 238万源代码下载- www.pudn.com...
- mx3 android6,魅族Flyme6全面推送!网友升级后傻了:竟还是安卓5.1