一个java 尾递归简单类递归多少次可以爆掉256g内存

java递归简单实例
1.自己的第一篇博客,想把自己的觉得有用的记录下来,也可以锻炼自己的表达能力。内容谈不上丰富,如果写的不好,请大家多多包涵。
2.废话不多说,就是干,先准备下脚本
drop TABLE IF EXISTS
CREATE TABLE `category` (
`id` int(11) NOT NULL,
`pid` int(11) DEFAULT NULL,
`name` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO category VALUES (1,0,'手机');
INSERT INTO category VALUES (2,0,'电脑');
INSERT INTO category VALUES (3,1,'苹果手机');
INSERT INTO category VALUES (4,1,'三星手机');
INSERT INTO category VALUES (5,2,'笔记本');
INSERT INTO category VALUES (6,2,'台式机');
INSERT INTO category VALUES (7,3,'iphone6');
INSERT INTO category VALUES (8,3,'iphone7');
SELECT * FROM
----2.1 新建一个品类表,插入几条记录,id不能重复,每条数据都是id,pid这种形式
3.新建一个Java项目
----3.1 引入mysql-connector-java-5.1.6
----3.2 新建实体category.java
public class Category {
private List&Category& childL// 子集合
public Integer getId() {
public void setId(Integer id) {
public Integer getPid() {
public void setPid(Integer pid) {
this.pid =
public String getName() {
public void setName(String name) {
this.name =
public List&Category& getChildList() {
return childL
public void setChildList(List&Category& childList) {
this.childList = childL
public String toString(){
return "id:" + id +",pid:" + pid +",name:" + name +",childList:" + childList+"";
}-----3.3测试类test.javapublic class Test {
public static void main(String[] args) {
Connection conn =
Statement stmt =
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123456");
stmt = conn.createStatement();
String sql = "select id,pid,name from category";
ResultSet rs = stmt.executeQuery(sql);
List&Category& list = new ArrayList&Category&();
while (rs.next()) {
Category cate = new Category();
cate.setId(rs.getInt("id"));
cate.setPid(rs.getInt("pid"));
cate.setName(rs.getString("name"));
list.add(cate);
//递归方法
list = dgCategoryList(list,1);//查询手机下面的
System.out.println(list);
rs.close();
stmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
* 递归方法(品类递归)
* @param categoryList
* @param parentId
private static List&Category& dgCategoryList(List&Category& categoryList, Integer parentId)
List&Category& childList = new ArrayList&Category&();
for (Category c : categoryList)
if (null != c && null != c.getId() && null != c.getPid())
int id = c.getId();
int pid = c.getPid();
if (parentId==pid)
List&Category& childs = dgCategoryList(categoryList, id);
c.setChildList(childs);
childList.add(c);
return childL
-----3.4控制台打印
结果:手机下面有苹果手机和三星手机,苹果手机有iphone6,iphone7,三星手机下面没有。
总结:数据库里的记录是id和父pid的数据,而业务需要是把某一个品类所有的子品类及子品类下面包含的。这个时候在内存中做递归
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!java中常见的递归使用场景 - 简书
java中常见的递归使用场景
一、递归概述
程序调用自身的编程技巧称为递归.递归作为一种算法在程序设计语言中广泛应用。
递归需具备的条件:
子问题须与原始问题为同样的事,且更为简单;
不能无限制调用本身,须有个出口,化简为非递归状态处理;
递归的次数不能太多,否则容易造成栈内存溢出(java.lang.StackOverflowError);
构造方法不能递归调用。
二、计算任意正整数的阶乘
由于受到int、long取值范围的限制,将数据转换成BigInteger包装类。但是受到电脑内存的限制,只能计算5000以内的正整数阶乘。
import java.math.BigI
import java.util.S
public class Recursion_Demo1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("求阶乘:");
System.out.println(getFactorial(sc.nextInt()));
public static BigInteger getFactorial(int num) {
if(num == 1) {
return BigInteger.ONE;
return BigInteger.valueOf(num).multiply(getFactorial(num - 1));
三、计算文件夹大小
由于File类下length()(返回值类型为long型)方法只能统计文件的大小,没有方法直接统计文件夹的大小,需要使用递归的方法遍历到所有的文件,并累加,最终计算出文件夹大小。
import java.io.F
import java.util.S
public class Recursion_Demo2 {
public static void main(String[] args) {
File dir = getDir();
System.out.println(getFileLength(dir));
System.out.println("统计完成!");
public static File getDir() {
//1,创建键盘录入对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个文件夹路径:");
//2,定义一个无限循环
while(true) {
//3,将键盘录入的结果存储并封装成File对象
String line = sc.nextLine();
File dir = new File(line);
//4,对File对象判断
if(!dir.exists()) {
System.out.println("您录入的文件夹路径不存在,请重新录入:");
}else if(dir.isFile()) {
System.out.println("您录入的是文件路径,请重新录入:");
//5,将文件夹路径对象返回
public static long getFileLength(File dir) {
//1,定义一个求和变量
long len = 0;
//2,获取该文件夹下所有的文件和文件夹listFiles();
File[] subFiles = dir.listFiles();
//3,遍历数组
if(subFiles != null) {
for (File subFile : subFiles) {
//4,判断是文件就计算大小并累加
if(subFile.isFile()) {
len = len + subFile.length();
//5,判断是文件夹,递归调用
len = len + getFileLength(subFile);
四、删除指定目录
File类目录下boolean delete()方法:删除此抽象路径名表示的文件或目录。如果此路径名表示一个目录,则该目录必须为空才能删除。
因此只能通过遍历目录下所有的文件,并删除。
import java.io.F
import java.util.S
public class Recursion_Demo3 {
public static void main(String[] args) {
File dir = getDir();
deleteFile(dir);
System.out.println("删除成功!");
public static void deleteFile(File dir) {
//1,获取该文件夹下的所有的文件和文件夹
File[] subFiles = dir.listFiles();
//2,遍历数组
if(subFiles != null) {
for (File subFile : subFiles) {
//3,判断是文件直接删除
if(subFile.isFile()) {
subFile.delete();
//4,如果是文件夹,递归调用
deleteFile(subFile);
//5,循环结束后,把空文件夹删掉
dir.delete();
public static File getDir() {
//1,创建键盘录入对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个文件夹路径:");
//2,定义一个无限循环
while(true) {
//3,将键盘录入的结果存储并封装成File对象
String line = sc.nextLine();
File dir = new File(line);
//4,对File对象判断
if(!dir.exists()) {
System.out.println("您录入的文件夹路径不存在,请重新录入:");
}else if(dir.isFile()) {
System.out.println("您录入的是文件路径,请重新录入:");
//5,将文件夹路径对象返回
五、拷贝文件夹
使用BufferedInputStream、BufferedOutputStream高效的拷贝文件夹。
import java.io.BufferedInputS
import java.io.BufferedOutputS
import java.io.F
import java.io.FileInputS
import java.io.FileOutputS
import java.io.IOE
import java.util.S
public class Recursion_Demo4 {
public static void main(String[] args) throws IOException {
System.out.println("请录入源文件夹:");
File src = getDir();
System.out.println("请录入目标文件夹:");
File target = getDir();
if(src.equals(target)) {
System.out.println("无法拷贝");
copy(src,target);
System.out.println("拷贝成功!");
public static void copy(File src, File target) throws IOException {
//1,在目标文件夹中创建原文件夹
File newDir = new File(target, src.getName());
newDir.mkdir();
//2,获取原文件夹中所有的文件和文件夹,存储在File数组中
File[] subFiles = src.listFiles();
//3,遍历数组
if(subFiles != null) {
for (File subFile : subFiles) {
//4,如果是文件就用io流读写
if(subFile.isFile()) {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(subFile));
BufferedOutputStream bos = new BufferedOutputStream
(new FileOutputStream(new File(newDir,subFile.getName())));
int b = 0;
while((b = bis.read()) != -1) {
bos.write(b);
bis.close();
bos.close();
//5,如果是文件夹就递归调用
copy(subFile,newDir);
public static File getDir() {
//1,创建键盘录入对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个文件夹路径:");
//2,定义一个无限循环
while(true) {
//3,将键盘录入的结果存储并封装成File对象
String line = sc.nextLine();
File dir = new File(line);
//4,对File对象判断
if(!dir.exists()) {
System.out.println("您录入的文件夹路径不存在,请重新录入:");
}else if(dir.isFile()) {
System.out.println("您录入的是文件路径,请重新录入:");
//5,将文件夹路径对象返回
其实拷贝文件夹还有更加简单的方法,org.apache.commons.io.FileUtils工具类有一个方法copyDirectoryToDirectory(File source,File target)可以直接完成。具体代码如:FileUtils.copyDirectoryToDirectory(getDir(), getDir());
参考文献:、等。
遍历二叉树以后补充。
自大的呆子和无可救药的理想主义者
百战程序员_ Java1573题 QQ群:034603 掌握80%年薪20万掌握50%年薪10万 全程项目穿插, 从易到难,含17个项目视频和资料持续更新,请关注www.itbaizhan.com 国内最牛七星级团队马士兵、高淇等11位十年开发经验专...
Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意义的,您不是第一个为此困惑的人,当然,也不会是最后一个:)大多数的美国人读 ubuntu 时,将 u 作为元音发音,类似单词 who 或者 boo ,重音在第二...
Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。分布式系统的协调导致了样板模式, 使用Spring Cloud开发人员可以快速地支持实现这些模式的服务和应用程序。他们将在任何分布式...
JDK中提供的文件操作相关的类,功能非常基础,进行复杂操作时需要做大量编程工作。实际开发中,往往需要你自己动手编写相关的,尤其在遍历目录文件时,经常用到递归,非常繁琐。Apache-commons工具包中提供了FileUtils,可以让我们非常方便的对文件和目录进行操作。本...
linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大家期待吧 命令区 系统管理与维护命令 date date(选项)(参数)|
说明 || :-------- | --------:||...
一切可以妥当的一定会妥当!准备迎接奇迹!很喜欢的话送给众生! 简单想,认真行! 我近期目标是财富增长!愿景是希望通过学习智慧实践智慧实现目标,让更多的人以我为榜样学习智慧种下好种子,享受好种子开花结果! 种下的种子 今天领导说说请我们吃饭,说到我住的附近西餐厅吃,因为我熟悉...
印象笔记到底怎么用啊踩到一个小而美的 bug有个功能上辈子就想要了大象你出来我就只想摸摸你腿 总有一些时候,你需要大象的帮助。你能否顺利找到大象?跟大象的交流你满意吗?我们希望听到你的声音。 花 90 秒填问卷,送礼物 点【阅读原文】即刻前往 礼物清单: 凡完成调查问卷并填...
当我吵着闹着要离开你的时候,恰恰是我最离不开你的时候。 小丽叫上一群朋友晚上去她家刷火锅,大家其乐融融打打闹闹,毫无异样。酒是个很奇妙的东西,开心时可以助兴,难过时却是伤情。而火锅桌上总是少不了酒的,一时兴起,拿起杯子把祝福期望说尽一饮而尽,吞下的才真实。一伙人谈工作谈感情...
一个人吃饭睡觉看剧傻笑,漫长无意义的一天走向终点。 下着雨,这样的时候总是有一些记忆在心底里醒过来,让我痛着再痛着。活着,是身不由己的刻意,就这样说你说过的话,走已走过的路,依然是孤独且灿烂着。
写《怎样用思维导图理顺ppt思路》这篇文章的时间,有个网友在留言里问了我一个很实在的问题: 会议中怎么用思维导图及时记录呢?特别是讲座人没有给出明确框架下,可以写一篇文章说说吗? 我没有正面回答,因为很惭愧,我也没有一边听会议一边用思维导图做记录。 通常我的做法也是做那种常...public class BB
void Sum50(int a)
sum=sum+i;
//判断是否加到了1
//调用方法自身
public static void main(String args[])
BB b=new BB();
b.Sum50(50);
//调用方法
intln(sum); //输出结果
其他答案(共1个回答)
ic class DoMain {
static int sum = 0;
public static void main(String[] args) {
intln("result:" + doSum(100));
private static int doSum(int number)
sum = sum + n...
(测试通过)
public class DoMain {
static int sum = 0;
public static void main(String[] args) {
intln("result:" + doSum(100));
private static int doSum(int number)
sum = sum +
if(number > 0)
doSum(number);
void main()
int recu(int);
printf("Please Input Number\n");
一般,离威尼斯圣马可广场大约300米,在圣马可广场
public static String getJsonString(Object obj, JsonConfig cfg) {
if (obj != null...
晴楼主注意:真正的递归方法如下,以上回答均非递归
float run(int n){
49级开始每升级需要的经验都一样的
可是65级到70级前杀怪所获得的经验是原来的1/2
70级到75级前杀怪所获得的经验是原...
答: 任何一个方向,都分技术、商务(公关、营销)等分支的。如果不是从事技术,了解一下JAVA,也是可以的。
答: 多线程 网络编程都忘光了 现在再翻书看做出来好累哦..
答: 网景导航者年时推出了版本4.0,大幅度的强化JavaScript再度强化其功能,但同时出现的bug和CSS的误译,使得占有率渐渐被Intern...
如何洗衣服?也许有人会说,衣服谁不会洗啊?放到水里,加点洗衣粉洗就成了呗。是啊,说是这样说,可是洗衣服还有不少学问呢。我就说说我的“洗衣经”吧。
说起洗衣服,想想真有不少要说的呢。
首先要分开洗。内衣外衣、深色浅色要分开。个人和个人的衣物也尽量分开洗涤,这样可以防止不同人体间细菌和病菌的相互交叉感染,尤其是宿舍或者朋友的衣服尽量不要放置在一起洗。即使是自己的衣服,内衣和外衣也要分开洗。因为外衣接触外界的污染和尘土较多,而内衣将直接接触皮肤,为避免外界尘螨等对皮肤的不良入侵,内外分开洗涤是有科学道理的。不同颜色的衣物要分开洗涤,可将颜色相近的一同洗涤,浅色的一起洗涤,容易掉色的单独洗涤,避免衣物因脱色而损坏。另外,袜子和其他衣物不要一起洗涤。
其次,使用洗衣粉宜提浸泡一会。洗衣粉功效的发挥不同于肥皂,只有衣物适时浸泡才能发挥最大的洗涤效果。浸泡时间也不宜太长,一般20分钟左右。时间太长,洗涤效果也不好,而且衣物易褶皱。有人洗衣服时把洗衣粉直接撒在衣物上便开始搓揉洗涤,那样不能发挥最好的洗涤效果,对洗衣粉是一种浪费,当然,免浸泡洗衣粉出外。另外,冬季一般宜使用温水浸泡衣物。水温过低,不能有效发挥洗衣粉的洗涤效果,水温太高,会破坏洗衣粉中的活性成分,也不利于洗涤。
再次,衣物及时更换,及时洗涤。衣服要及时更换,相信道理大家应该都很清楚。可是,衣物换下后应该及时清洗,有人却做的不好。好多家庭喜欢将换的衣服积攒起来,每周洗一次,这样很不科学,容易使衣物上积聚的细菌大量繁殖,容易诱发皮疹或皮肤瘙痒症状。为了个人和家人的身体健康,还是勤快一点,把及时换下的衣物及时洗涤,这样,其实也费不了多少时间,也不至于最后要花费半天甚至更长 的时间专门来洗涤大量的衣物要节约的多。另外衣服穿的太久就比较脏,要花很大的力气洗涤才能洗干净,也容易将衣物搓揉变形,而影响美观和穿着效果。
洗衣服是个简单的小家务,也是生活中不可缺少的一件事,学问却很多,也许您的“洗衣心得”比这还要科学,还要多样,欢迎您 的指正~~
1、以身作则,如果连自己都做不好,还怎么当班长?
2、人缘好,我就是由于人缘不好,才改当副班长的。
3、团结同学,我们班有一个班长就是由于不团结同学才不当班长的,他现在是体育委员。
4、要有管理能力,首先要有大嗓门,我们班有位学习委员就是由于声音太轻才以3票之差当不了班长;其次要口齿清楚,让同学能听得懂你说的话;第三要说出有道理的话,让吵闹或打架的同学心服口服;第四,不能包庇好朋友,公正;第五,要搞好师生关系;第六,要严以律己,宽以待人,我们班的第一任班长就是因为“严以待人,宽以律己”才不能继续当下去的。
5、要坚持,我们班的纪律委员就是由于没有恒心,原来的大组长、卫生委员、劳动委员、体育委员、学习委员、小组长等(每个学期都加起来)都被免除了,现在的才当1天的纪律委员要不要免除都在考虑中,还要写说明书。
6、提醒班干部做自己要做的事,要有责任心。我们班的纪律委员就是没有责任心,班长的职务都被罢免了。
7、不要拿出班长的架子,要虚心。
8、关心同学(包括学习)。
9、要及早发现问题,自己可以解决的自己解决;自己不能解决的,早日让班主任解决。
10、要发现班级的好的地方,及时表扬。让全班都照做。
11、不要太担心学习,当个班干部,对以后工作有好处,这是个锻炼的机会,好好当吧,加油!
在高中阶段,学校和老师的规定一般都是为了学生的成绩着想,执行老师的话,其实也是为了大家好。即使有时候打点小报告,只要你的心态的好的,也不是坏事。比如A学习不专心,你用个适当的办法提醒老师去关心他,其实也是为了他好。
总的方针:和同学们组成一个团结的班集体,一切以班集体利益为上(当然不冲突国家、社会和学校利益为前提)。跟上面领导要会说话,有一些不重要的东西能满就满,这对你的同学好,也对你的班好。
再说十五点
一,以德服人
也是最重要的,不靠气势,只靠气质,首先要学会宽容(very important)你才能与众不同,不能和大家“同流合污”(夸张了点),不要有这样的想法:他们都怎么样怎样,我也。如果你和他们一样何来让你管理他们,你凭什么能管理他们?
二,无亲友
说的绝了点,彻底无亲友是不可能,是人都有缺点,有缺点就要有朋友帮助你。不是说,不要交友,提倡交友,但是不能把朋友看的太重,主要不能对朋友产生依赖感,遇到事情先想到靠自己,而不是求助!
三,一视同仁
上边说的无亲友也是为了能更好的能一视同仁,无论是什么关系,在你眼里都应是同学,可能比较难作到,但没有这点,就不可能服众。
四,不怕困难
每个班级里都会一些不听话的那种,喜欢摆谱的那种,不用怕,他们是不敢怎么样的!知难而进才是一个班长应该有的作风。
五,带头作用
我想这点大家都有体会就不多说了
六,打成一片
尽量和大家达成共识,没有架子,不自负不自卑,以微笑面对每一个人,不可以有歧视心理,不依赖老师,有什么事情自己解决,老师已经够累的了。
七,“我是班长”
这句话要随时放在心底,但是随时都不要放在嘴上,有强烈的责任心,时刻以班级的荣誉为主,以大家的荣誉为主。什么事情都冲在最前面。遇事镇定。
八,帮助同学
帮助同学不是为了给大家留下一个好的印象等利益方面的事,是你一个班长的责任,是你应该做的,只要你还是一个班长,你就要为人民服务(夸张)为同学服务。
九,诚实守信
大家应该都知道这个,是很容易作到的,也是很不容易作到,然这两句话并不是矛盾的,不是为了建立一个好的形象,和班级责任也没有什么关系,只是一个人应该有的道德品质。但你必须作到,连这样都做不到,就不可能做成一个好的班长。
十,拿的起放的下
学会放弃也同样重要,学会辨别好与坏。知道什么是该做的,什么是不该做的。
十一,谦虚
认真分析同学给你提的意见,不管是有意的,还是无意的。提出来就有他的想法,有他的动机。要作到一日三醒我身。
十二,心态端正
总之要有一个好的心态,积极向上的心态,把事情往好里想,但同时要知道另一面的危机,遇到事情首先想到的应该是解决问题,而不是别的!
十三,合理的运用身边的人和事
主动,先下手为强,遇到不能够管理的,就可以和其他班干部一起对付,实在不行,就迅速找到老师陈述自己的观点,免得他倒打一耙(尽量少打小报告.)
十四,和老师同学搞好关系.
威信可以提高,你说的话老师也比较相信,可以简单一点的拿到老师的一些特殊授权,而这些授权往往对你的帮助很大.
十五,合理的运用自己的权利和魄力
对付难管理的,权利在他的眼中已经不存在的,就运用你的魄力,用心去交流,努力感动身边的人,感动得他们铭记于心,你就成功了.
一点要加油哦
这个问题有点不知所问了。
公务员并不由单位性质决定,行政单位行政编的是公务员,但并不是说行政单位的就是公务员,事业单位里面参照管理的也是公务员。
所以你的问题只能回答为:按公务员管理的是公务员。
有可能搓纸轮需要清洗一下了,如果清洗了还是不行的话,那估计需要更换搓纸组件了
肤色:人类肤色遗传是由2对以上的基因控制的,不同肤色的基因对后代作用是相同的,不存在显隐性的区别,因此肤色在遗传时往往不偏不倚,总是遵循父母“中和”色的自然法则。比如,父母皮肤较黑,绝不会有白嫩肌肤的子女,若一方白、一方黑,那么,在胚胎时“平均”后大部分会给子女一个不白不黑的“中性”肤色,但也有更偏向一方的情况发生。因此,黄种人生的孩子,一定是黄种人的肤色。一个非洲的留学生找了个肤色偏黑的中国女子,生出的孩子果然皮肤也很黑。
下腭:绝对的显性遗传,父母任何一方有突出的大下巴,孩子十有八九会长成相似的下巴,这种特征表现得非常明显。
鼻子:一般来讲,鼻子大、高而鼻孔宽的人呈显性遗传。父母双方中有一人是挺直的鼻梁,遗传给孩子的可能性就很大。另外,鼻子的遗传基因会一直持续到成年,也就是说,小时候矮鼻子的人,长到成年时期还有变成高鼻子的可能。
眼睛形状:父母的眼睛形状对孩子的影响显而易见。对于孩子来讲,眼形、眼睛的大小是遗传自父母的,而且大眼睛相对小眼睛而言是显性遗传。只要父母双方有一个人是大眼睛,生大眼睛孩子的可能就会大一些。
双眼皮:相比单眼皮的隐性遗传,双眼皮作为显性遗传更容易在孩子身上表现出来。一般来讲,单眼皮与双眼皮的人结婚,孩子极有可能是双眼皮。如果父母双方都是单眼皮,则孩子一般也应该是单眼皮。
眼球颜色:在眼球颜色方面,黑色等深颜色相对于浅颜色而言是显性遗传。也就是说,如果你羡慕蓝眼球,选择了一个蓝眼球人做了爱人,但因为你是黑眼球,所生的孩子不会是蓝眼球。
睫毛:长睫毛也是显性遗传的。父母双方只要有一个人拥有动人的长睫毛,孩子遗传长睫毛的可能性就非常大。
耳朵:耳朵的形状是遗传的,而且大耳朵是显性遗传,小耳朵是隐性遗传。父母双方只要一个人是大耳朵,那么孩子就极有可能也是一对大耳朵。
嘴唇:嘴唇的薄厚也是比较容易遗传给孩子的。因为使上嘴唇变薄和使下嘴唇鼓起的都是显性遗传因子。如果妈妈或爸爸的某一方具备了这些特征,那通常就会以2人中有1人的比例遗传给孩子。
寿命:寿命的长短也是有遗传基础的。如果你的家族中有长寿的先例,那么你的孩子长寿的可能性是很大的。最有说服力的是对同卵双生子的调查,资料统计,60~75岁死去的双胞胎,男性双胞胎死亡的时间平均相差4年,女性双胞胎仅差2年。不过,寿命也受环境因素的影响,如饮食习惯、生活环境、工作环境等,也在不同程度上左右着人的寿命。
身高:研究表明,人的身高有70%取决于遗传,后天因素的影响只占到30%。一般来讲,如果父母身材较高,孩子身利高的机会为30%,矮的机会为10%,身材偏矮则反之;如果父母中一人较高,一人较低,就取决于其他因素。
胖瘦人的体形有一定的遗传性。比如,我们中的一些人,吃同样的食物,有着同样的运动量,但有些人体形正常,有些人却偏胖或偏瘦。研究认为,不同的人有着不同的代谢率,通常代谢率较低的人就容易长胖,这是由于体形遗传因素而决定的,如果父母体形属于容易长胖的那种类型,孩子就容易偏胖。如果父母中有一人肥胖,孩子发胖的机会是30%。如果父母双方都肥胖,孩子发胖的机会是50%~60%。
表情以色列的科学家们发现,人类的一些面部表情是可以遗传的,而并非模仿父母的结果。尤其是表达消极情绪的面部表情最像。其他一些独具家族特点的表情,比如吃惊时竖眉毛、生气时咬嘴唇、思考时伸舌头等,也部属于遗传特征。
少白头:属于概率较低的隐性遗传,因此不必过分担心父母的少白头会在孩子的头顶上如法炮制。
青春痘:这个让今后处于青春期少年耿耿于坏的容颜症,居然也与遗传有关。因为父母双方若患过青春痘,子女们的患病率将比无家庭史者高出20倍。
后天可塑的遗传   
声音:孩子的声音通常都会非常接近父母,其相似程度会比长相、形体更甚。如果父亲笑声爽朗,母亲又是个大嗓门,很难想象孩子会细声细气。通常,儿子的声音与父亲很接近,女儿的声音则很像母亲。
声音的高低、音量、音质等各方面,不仅与喉头有关,还要由鼻的大小、张口的大小、舌的长短、颜面的骨骼等各因素综合决定。而且,这些方面无不遗传父母的基因,所以声音遗传是不奇怪的。但是,这种由父母生理解剖结构所影响的音质如果不美,大多数可以通过后天的发音训练而改变。
视力:孩子是否会近视与遗传也有一定的关系,尤其是当爸妈均为高度近视时,孩子近视的几率就会更大,即使不是一出生就成为近视,也会成为近视基因的携带者,一旦受到环境的影响,就可能发展为近视。不过,根据相关的资料显示:因为遗传因素而成为近视的人数仅占近视总人数的5%,可见后天环境和习惯的影响更加不容忽视。此外,远视也与遗传有一定关系,可能是显性遗传或多基因遗传。
智力:虽然智力不完全由遗传因素所决定,但与遗传有一定关系。人的智力取决于遗传、环境两方面的因素。一般认为,遗传可以起到60%的作用,环境则决定了另外40%。有人长期研究过一群智商在140分以上的孩子,从中发现这些孩子长大后一直保持优秀的才智,他们的孩子的智商平均为128分,远远超过一般孩子的水平。而那些精神缺陷者,他们的孩子当中有59%的人有精神缺陷或智力迟钝。
在智力遗传中,不仅包括智商,还包括情商。所谓的情商,是指人的个性、脾气、处事能力、交际能力等方面比如,有些孩子在处事能力、交际能刀方面像爸爸,而另外些方面,如个性、脾气与母亲很相像。
另外,孩子的智力与环境也有很大的关系,智力的实际表现还要受后天的极大影响,因此我们提倡早教。从胎儿开始,脑细胞发育的第高峰出现在10~18周,第二高峰出现在孩子出生后的3~6个月。如果期望孩子智力发育好,就要在第高峰期即孕期注意摄取营养,在第二高峰期注意进行母乳喂养,这样就会使孩子的智力很好地发育。
天赋:无论是爸爸还是妈妈,在某些方面的天赋都有可能遗传给孩子,使孩子在某些方面的潜力很高。因此,父母的某种天赋在周围环境影响下,如果适当地进行开发,就可以便孩子在这方面有更好的发展。
硬膜外分娩镇痛的一般并发症如低血压、头痛比较轻微,严重威胁生命的并发症比较少见。常见不良反应表现在对产程的影响、对胎盘血供的影响。低血压这个不良反应是影响胎盘血流的主要因素。但在药物浓度降低至一定程度(即常规浓度)时,影响并不明显。硬膜外分娩镇痛对宫缩的影响各不相同。一般局麻药浓度越低、用药时间不要过早,镇痛过程中辅以一定量的催产素,都可以减轻宫缩抑制作用。一旦出现任何不能改善的胎盘血流下降、胎儿心率改变,医生会当机立断,终止自然分娩,以确保母婴安全。因此,整个分娩过程中需要妇产科医生与麻醉科医生共同监测产妇情况。但总体来说,硬膜外镇痛对母亲和胎儿的安全性还是值得肯定的。
(1)产后与新生儿同在一起,而不是隔离,那就会使产妇的乳量平均增加约40%。即使乳汁少也应该让孩子吮吸,因为吮吸是一种良好的刺激,可以引起反射性乳汁分泌。
(2)完全无奶或部分无奶的产妇,可每天服用30毫克胃复安药片(日3次,每次服10毫克),产妇则每3小时喂奶l次,经4天左右就有87%的人排乳。
(3)每次喂奶应尽量把奶吸空。
(4)哺乳女性的生活要有规律,精神应该愉快,因为情绪沮丧时奶水会就减少。
饮食疗法更有效:
(1)鲤鱼1条,去肠、杂,不去鳞,加赤小豆100克和姜少许,炖汤食之。
(2)生花生仁适量,煮汤服。
(3)鳃鱼1条,去肠、杂,加冬瓜适量,煮汤取食。
(4)猪肝500克,黄芪(中药)100克,煮汤,肝熟后除黄芪,饮肝汤。
(5)鲜木瓜适量,河鱼(品种不论)适量,共煮汤,加调味品服食。
(6)猪蹄1~2只,加花生米150克,同煮熟,饮汤食花生及诸蹄。
(7)螺肉250克,黄酒适量,蒸后再煮汤服食。
(8)鲜海蜇适量,切碎,煮熟后服1小碗,每日1次。
(9)鲜红薯叶250克,猪五花肉200克,煮后调味取食,每日分2次服完。
(10)鲜带鱼300(洗净),生木瓜400克(去皮、核),切块。共放锅内加水煨熟,调味后服食。
(11)豆腐250克,红糖100克,水煮,加米酒50毫升,1次服完,连服5日。
主要应对结婚前、怀孕前及怀孕早期这三个关键阶段给予足够的重视。首先,婚前要进行优生咨询,婚前检查应严格进行,发现遗传病者还应进行相应的遗传咨询。如婚后避孕了一段时间,那么准备怀孕前夫妻双方都应该是身体健康,女方最好进行一次孕前咨询及检查。在怀孕早期,就是怀孕3个月之内,应尽量避免较重的碰撞及粗暴、频繁的性生活等。另外,孕妇要注意环境因素的影响,避免接触致畸因素,包括物理性的,如放射线、微波、高热等;化学性的,如一些职业性有毒有害物质:汞、铅、镉等,一些有致畸作用的药物、酒精也属此类;生物性的,如风疹病毒、单纯疱疹病毒、巨细胞病毒和弓形虫感染等,均应避免。 做好婚前、孕前及早孕期保健是优生的重要手段,也是预防自然流产的关键。
若您在到期还款日前未及时归还账单最低还款,会收取滞纳金和利息,且会影响您的个人信用。滞纳金收取最低还款额未还部分的5%,最低收取RMB10元或USD1元。利息是当期的所有消费将从记账日(一般是消费后的第二天)开始计收,日息万分之五,直至您全部还清为止。为避免影响个人信用,建议您按时还款,如不方便全额还清账单,请您至少按时还清最低还款额的部分信用卡最低还款额=10%信用卡账户所有一般交易 100%账户内所有未结清的分期交易单期金额 100%上期最低还款额未还清部分 100%超过账户信用额度使用的全部款项 100%费用 100%利息最低还款额是指信用卡每月最低需偿还的金额,显示在信用卡当月账单上。若您不能一次性还清,可在最后缴款日前按时还足最低还款额,不会影响个人信用,但无法享受免息还款期,当期所有消费从记账日开始计收利息,日息万分之五。(按时全额还款,刷卡消费是可以享受免息期)若不还款,则会影响您的信用,会收取您的利息。银行会先催款,之后不排除寻求法律渠道解决。
个人推荐玖鼎这家公司,我朋友去年就选这家公司办理的,他们家的价格相对于市场上其他家来说比较优惠,更重要的是他们非常专业,在承诺的周期中帮你把积分入户办下来,真的觉得他们家还挺不错的,有需要的可以去关注一下他们。
办理积分入户要找个靠谱机构,看看他们公司理念,公司环境,服务态度,专业程度。
你既然已经录取艺术了,就不太必须文化课了。如果想的话可以在课外找老师辅导!
期望您能接纳!?
柔肤水:以软化角质,让皮肤柔软、嫩滑为特点,一般pH值偏向弱碱性。通过可帮助皮肤加速清除老化细胞,使肌肤更清爽,多适宜肤色较黯淡的油性、混合性肤质。通常去痘型化妆水中也含有与它同成份的水杨酸,因为它能够帮助角质剥落,有一定杀菌、去痘作用。但是有些人对水杨酸过敏,所以购买时要看清成分表。
玛卡水晶冒菜是目前全国唯一一家用水晶锅作为容器盛装冒菜,也是唯一一家可以边吃边光波加热的冒菜品牌,水晶冒菜打破了冒菜的传统吃法与煮法,是新派冒菜的一大特色,在餐饮美食界迅速崛起,成为冒菜行业发展最快的冒菜品牌,也是最值得加盟的小型餐饮。于是, 跟合伙人一起从盐城公司到成都魔力玛卡餐饮公司考察,品尝水晶冒菜后,马上签订了江苏省的代理。
public class BB
void Sum50(int a)
sum=sum+i;
//判断是否加到了1
//调用方法自身
public static void main(String args[])
BB b=new BB();
b.Sum50(50);
//调用方法
intln(sum); //输出结果
int Search_Bin_Recursive(SSTable ST,int key,int low,int high)//折半查找的递归算法
if(low&high) return 0; //查找不到时返回0
mid=(low+high)/2;
if(ST.elem[mid].key==key)
else if(ST.elem[mid].key&key)
return Search_Bin_Recursive(ST,key,low,mid-1);
return Search_Bin_Recursive(ST,key,mid+1,high);
int b= rseInt(a);后面加上if (b==2) {
intln("是质数"); }
public class Catch{ public static void main(String[] args) {
int[] a=new int[]{00,00,00}; String[] b=new String[]{"张三","李四","王五","张一","四思","特异","奇特","踵武","许多" }; String[] c=new String[]{"』","』","』"}; int m=0;
for(int i=0;i&a.i++) {
for(int j=1;j&a.j++)
if(a[i]==a[j]&&i!=j&&a[j]!=0)
c[m]+=b[j]+".";
m++; } for(int n=0;n&c.n++)
if(c[n]!="』")
intln(c[n]+b[n]+"
"+"工资相同");
三个文件:一:skey_DES.java//对称秘钥生成及对象化保存import java.io.FileOutputSimport java.io.ObjectOutputSimport javax.crypto.KeyGimport javax.crypto.SecretKpublic class Skey_DES{ public static void main(String args[])throws Exception {
KeyGenerator kg=KeyGenerator.getInstance("DESede");
kg.init(168);
SecretKey k=kg.generateKey();
FileOutputStream f=new FileOutputStream("key1.txt");
ObjectOutputStream b= new ObjectOutputStream(f);
b.writeObject(k); }};二:SEnc.java//对称秘钥加密,使用字节码import java.io.*;import java.security.*;import javax.crypto.*;public class SEnc{ public static void main(String args[]) throws Exception {
String s="Hello123Hello123Hello123Hello123";
FileInputStream f=new FileInputStream("key1.txt");
ObjectInputStream b=new ObjectInputStream(f);
Key k=(Key)b.readObject();
Cipher cp=Cipher.getInstance("DESede");
cp.init(Cipher.ENCRYPT_MODE,k);
byte ptext[]=s.getBytes("UTF8");
for(int i=0;i&ptext.i++)
System.out.print(ptext[i]+",");
System.out.println("");
byte ctext[]=cp.doFinal(ptext);
for(int i=0;i&ctext.i++)
System.out.print(ctext[i]+",");
FileOutputStream f2=new FileOutputStream("SEnc.txt");
f2.write(ctext); }};三:SDec.java//使用对称秘钥解密import java.io.*;import java.security.*;import javax.crypto.Cimport javax.crypto.spec.SecretKeySpublic class SDec{ public static void main(String args[])throws Exception {
FileInputStream f=new FileInputStream("SEnc.txt");
int num=f.available();
byte[] ctext=new byte[num];
f.read(ctext);
FileInputStream f2=new FileInputStream("key1.txt");
ObjectInputStream b=new ObjectInputStream(f2);
Key k=(Key)b.readObject();
Cipher cp=Cipher.getInstance("DESede");
cp.init(Cipher.DECRYPT_MODE,k);
byte[] ptext=cp.doFinal(ctext);
String p=new String(ptext,"UTF8");
System.out.println(p); }};
可以运用分而治之方法来解决排序问题,该问题是将n 个元素排成非递减顺序。分而治之方法通常用以下的步骤来进行排序算法:若n 为1,算法终止;否则,将这一元素集合分割成两个或更多个子集合,对每一个子集合分别排序,然后将排好序的子集合归并为一个集合。
假设仅将n 个元素的集合分成两个子集合。现在需要确定如何进行子集合的划分。一种可能性就是把前面n- 1个元素放到第一个子集中(称为A),最后一个元素放到第二个子集里(称为B)。按照这种方式对A递归地进行排序。由于B仅含一个元素,所以它已经排序完毕,在A排完序后,只需要用程序2 - 1 0中的函数i n s e r t将A和B合并起来。把这种排序算法与I n s e r t i o n S o r t(见程序2 - 1 5)进行比较,可以发现这种排序算法实际上就是插入排序的递归算法。该算法的复杂性为O (n 2 )。把n 个元素划分成两个子集合的另一种方法是将含有最大值的元素放入B,剩下的放入A中。然后A被递归排序。为了合并排序后的A和B,只需要将B添加到A中即可。假如用函数M a x(见程序1 - 3 1)来找出最大元素,这种排序算法实际上就是S e l e c t i o n S o r t(见程序2 - 7)的递归算法。
假如用冒泡过程(见程序2 - 8)来寻找最大元素并把它移到最右边的位置,这种排序算法就是B u b b l e S o r t(见程序2 - 9)的递归算法。这两种递归排序算法的复杂性均为(n2 )。若一旦发现A已经被排好序就终止对A进行递归分割,则算法的复杂性为O(n2 )(见例2 - 1 6和2 - 1 7)。
上述分割方案将n 个元素分成两个极不平衡的集合A和B。A有n- 1个元素,而B仅含一个元素。下面来看一看采用平衡分割法会发生什么情况: A集合中含有n/k 个元素,B中包含其余的元素。递归地使用分而治之方法对A和B进行排序。然后采用一个被称之为归并( m e rg e)的过程,将已排好序的A和B合并成一个集合。
例2-5 考虑8个元素,值分别为[ 1 0,4,6,3,8,2,5,7 ]。如果选定k = 2,则[ 1 0 , 4 , 6 , 3 ]和[ 8 , 2 , 5 , 7 ]将被分别独立地排序。结果分别为[ 3 , 4 , 6 , 1 0 ]和[ 2 , 5 , 7 , 8 ]。从两个序列的头部开始归并这两个已排序的序列。元素2比3更小,被移到结果序列;3与5进行比较,3被移入结果序列;4与5比较,4被放入结果序列;5和6比较,.。如果选择k= 4,则序列[ 1 0 , 4 ]和[ 6 , 3 , 8 , 2 , 5 , 7 ]将被排序。排序结果分别为[ 4 , 1 0 ]和[ 2 , 3 , 5 , 6&n
递归算法要求递归算法所体现的“重复”一般有三个要求:一是每次调用在规模上都有所缩小(通常是减半);二是相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入);三是在问题的规模极小时必须用直接给出解答而不再进行递归调用,因而每次递归调用都是有条件的(以规模未达到直接解答的大小为条件),无条件递归调用将会成为死循环而不能正常结束
(3)递归算法解题通常显得很简洁,但递归算法解题的运行效率较低
分析:根据题意,阿米巴每3分钟分裂一次,那么从开始的时候将阿米巴放入容器里面,到45分钟后充满容器,需要分裂45/315次
递推算法是一种用若干步可重复运算来描述复杂问题的方法.中文名递推外文名TheAlgorithmofRecursive1基本介绍2递推算法递推基本介绍编辑递推算法是一种用若干步可重复的简运算(规律)来描述复杂问题的方法.递推是序列计算机中的一种常用算法
java的输入函数
java没有输如输出函数,主有输入输出流
对任何输入输出设备的处理都可以使用对应的输入输出流来完成
比如: 是标准输入流,System.out是标准的输出流
FileInputStream是文件输入流
FileOutputStream是文件输出流
java的流很多,而且功能强大,你可以很方便的使用
建议你还是从最基础开始学习,深刻理解一下oop的意义和实质
递归函数就是自己调用自己的函数
递归包括递归部分和终止部分(必须包含终止部分,不然会无限下去)
下面截图是用递归写的一个裴波那契数列
函数f<1>(x)=f(x),f<n>(x)=f[f<n-1>(x)],n>1,n∈N,则称f<n>(x)是递归函数。
递归半函数的特点是,它可能没有定义从而没有值,但只要有值必然可以计算
不能,因为它没有接收返回值的上级调用它的函数
1923年,T.司寇伦提出并初步证明一切初等数论中的函数都可以由原始递归式作出,即都是原始递归函数
由初始函数出发,经过有限次的代入于原始递归式而作出的函数叫做原始递归函数
编程语言中,函数Func(Typea,……)直接或间接调用函数本身,则该函数称为递归函数
另一个重要的构造新函数的方法是造逆函数,由加法造减法,由乘法造除法等
递归论原始递归函数由本原函数出发,经过有限次的叠置与原始递归式而作出的函数叫做原始递归函数
public class BB
void Sum50(int a)
sum=sum+i;
//判断是否加到了1
//调用方法自身
public static void main(String args[])
BB b=new BB();
b.Sum50(50);
//调用方法
intln(sum); //输出结果
int b= rseInt(a);后面加上if (b==2) {
intln("是质数"); }
public class Catch{ public static void main(String[] args) {
int[] a=new int[]{00,00,00}; String[] b=new String[]{"张三","李四","王五","张一","四思","特异","奇特","踵武","许多" }; String[] c=new String[]{"』","』","』"}; int m=0;
for(int i=0;i&a.i++) {
for(int j=1;j&a.j++)
if(a[i]==a[j]&&i!=j&&a[j]!=0)
c[m]+=b[j]+".";
m++; } for(int n=0;n&c.n++)
if(c[n]!="』")
intln(c[n]+b[n]+"
"+"工资相同");
三个文件:一:skey_DES.java//对称秘钥生成及对象化保存import java.io.FileOutputSimport java.io.ObjectOutputSimport javax.crypto.KeyGimport javax.crypto.SecretKpublic class Skey_DES{ public static void main(String args[])throws Exception {
KeyGenerator kg=KeyGenerator.getInstance("DESede");
kg.init(168);
SecretKey k=kg.generateKey();
FileOutputStream f=new FileOutputStream("key1.txt");
ObjectOutputStream b= new ObjectOutputStream(f);
b.writeObject(k); }};二:SEnc.java//对称秘钥加密,使用字节码import java.io.*;import java.security.*;import javax.crypto.*;public class SEnc{ public static void main(String args[]) throws Exception {
String s="Hello123Hello123Hello123Hello123";
FileInputStream f=new FileInputStream("key1.txt");
ObjectInputStream b=new ObjectInputStream(f);
Key k=(Key)b.readObject();
Cipher cp=Cipher.getInstance("DESede");
cp.init(Cipher.ENCRYPT_MODE,k);
byte ptext[]=s.getBytes("UTF8");
for(int i=0;i&ptext.i++)
System.out.print(ptext[i]+",");
System.out.println("");
byte ctext[]=cp.doFinal(ptext);
for(int i=0;i&ctext.i++)
System.out.print(ctext[i]+",");
FileOutputStream f2=new FileOutputStream("SEnc.txt");
f2.write(ctext); }};三:SDec.java//使用对称秘钥解密import java.io.*;import java.security.*;import javax.crypto.Cimport javax.crypto.spec.SecretKeySpublic class SDec{ public static void main(String args[])throws Exception {
FileInputStream f=new FileInputStream("SEnc.txt");
int num=f.available();
byte[] ctext=new byte[num];
f.read(ctext);
FileInputStream f2=new FileInputStream("key1.txt");
ObjectInputStream b=new ObjectInputStream(f2);
Key k=(Key)b.readObject();
Cipher cp=Cipher.getInstance("DESede");
cp.init(Cipher.DECRYPT_MODE,k);
byte[] ptext=cp.doFinal(ctext);
String p=new String(ptext,"UTF8");
System.out.println(p); }};
可以运用分而治之方法来解决排序问题,该问题是将n 个元素排成非递减顺序。分而治之方法通常用以下的步骤来进行排序算法:若n 为1,算法终止;否则,将这一元素集合分割成两个或更多个子集合,对每一个子集合分别排序,然后将排好序的子集合归并为一个集合。
假设仅将n 个元素的集合分成两个子集合。现在需要确定如何进行子集合的划分。一种可能性就是把前面n- 1个元素放到第一个子集中(称为A),最后一个元素放到第二个子集里(称为B)。按照这种方式对A递归地进行排序。由于B仅含一个元素,所以它已经排序完毕,在A排完序后,只需要用程序2 - 1 0中的函数i n s e r t将A和B合并起来。把这种排序算法与I n s e r t i o n S o r t(见程序2 - 1 5)进行比较,可以发现这种排序算法实际上就是插入排序的递归算法。该算法的复杂性为O (n 2 )。把n 个元素划分成两个子集合的另一种方法是将含有最大值的元素放入B,剩下的放入A中。然后A被递归排序。为了合并排序后的A和B,只需要将B添加到A中即可。假如用函数M a x(见程序1 - 3 1)来找出最大元素,这种排序算法实际上就是S e l e c t i o n S o r t(见程序2 - 7)的递归算法。
假如用冒泡过程(见程序2 - 8)来寻找最大元素并把它移到最右边的位置,这种排序算法就是B u b b l e S o r t(见程序2 - 9)的递归算法。这两种递归排序算法的复杂性均为(n2 )。若一旦发现A已经被排好序就终止对A进行递归分割,则算法的复杂性为O(n2 )(见例2 - 1 6和2 - 1 7)。
上述分割方案将n 个元素分成两个极不平衡的集合A和B。A有n- 1个元素,而B仅含一个元素。下面来看一看采用平衡分割法会发生什么情况: A集合中含有n/k 个元素,B中包含其余的元素。递归地使用分而治之方法对A和B进行排序。然后采用一个被称之为归并( m e rg e)的过程,将已排好序的A和B合并成一个集合。
例2-5 考虑8个元素,值分别为[ 1 0,4,6,3,8,2,5,7 ]。如果选定k = 2,则[ 1 0 , 4 , 6 , 3 ]和[ 8 , 2 , 5 , 7 ]将被分别独立地排序。结果分别为[ 3 , 4 , 6 , 1 0 ]和[ 2 , 5 , 7 , 8 ]。从两个序列的头部开始归并这两个已排序的序列。元素2比3更小,被移到结果序列;3与5进行比较,3被移入结果序列;4与5比较,4被放入结果序列;5和6比较,.。如果选择k= 4,则序列[ 1 0 , 4 ]和[ 6 , 3 , 8 , 2 , 5 , 7 ]将被排序。排序结果分别为[ 4 , 1 0 ]和[ 2 , 3 , 5 , 6&n
递归算法要求递归算法所体现的“重复”一般有三个要求:一是每次调用在规模上都有所缩小(通常是减半);二是相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入);三是在问题的规模极小时必须用直接给出解答而不再进行递归调用,因而每次递归调用都是有条件的(以规模未达到直接解答的大小为条件),无条件递归调用将会成为死循环而不能正常结束
在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解
(3)递归算法解题通常显得很简洁,但递归算法解题的运行效率较低
分析:根据题意,阿米巴每3分钟分裂一次,那么从开始的时候将阿米巴放入容器里面,到45分钟后充满容器,需要分裂45/315次
在一个子程序(过程或函数)的定义中又直接或间接地调用该子程序本身,称为递归。
递归是一种非常有用的程序设计方法。用递归算法编写的程序结构清晰,具有很好的可读性。
递归算法的基本思想是:把规模大的、较难解决的问题变成规模较小的、易解决的同一问题。规模较小的问题又变成规模更小的问题,并且小到一定程度可以直接得出它的解,从而得到原来问题的解。
利用递归算法解题,首先要对问题的以下三个方面进行分析:
一、决定问题规模的参数。需要用递归算法解决的问题,其规模通常都是比较大的,在问题中决定规模大小(或问题复杂程度)的量有哪些?把它们找出来。
二、问题的边界条件及边界值。在什么情况下可以直接得出问题的解?这就是问题的边界条件及边界值。
三、解决问题的通式。把规模大的、较难解决的问题变成规模较小、易解决的同一问题,需要通过哪些步骤或等式来实现?这是解决递归问题的难点。
把这些步骤或等式确定下来。 把以上三个方面分析好之后,就可以在子程序中定义递归调用。
记得C里面有一个汉诺塔,就是非用递归才能解决的一个问题!可以仔细理解一下哦!
正在加载...
Copyright &
Corporation, All Rights Reserved
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区

我要回帖

更多关于 java 递归查询 的文章

 

随机推荐