java递归算法提前返回值带出
/**
*
*/
package testJava.java.foreach; import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Queue;
import java.util.Stack; /**
* @author jhuang.sjtu
* @function 测试循环嵌套函数返回值 递归算法
* @date 2017年4月12日
* @version
*/
public class TestForeach { public int starta(int j,Map<String,Integer> re){
int k = -2;
for (; j < 11; ) {
int i = get(j);
if(i == -1){
break; //跳出
}
k = dothing(i,j);
System.out.println(j+" re="+re.get("k"));
re.put("k", k);
if(k != 0){
// return starta(++j,re);
starta(++j,re); //是否带return都一样~
}
break;
}
k=re.get("k");
return k;
} public int startb(int j,ArrayList<Integer> re){
int k = -2;
for (; j < 11; ) {
int i = get(j);
if(i == -1){
break; //跳出
}
k = dothing(i,j);
re.add(k);
// if(re.size()!=0)
System.out.println(j+" k~"+k);
for (Integer integer : re) {
System.out.println("rrr="+integer);
} if(k != 0){
// return starta(++j,re);
startb(++j,re); //是否带return都一样~
}
break;
}
System.out.println("@j="+j);
k=re.get(re.size()-1); //最后一个
return k;
} public int startc(int j,Queue<Integer> re){
int k = -2;
for (; j < 11; ) {
int i = get(j);
if(i == -1){
break; //跳出
}
k = dothing(i,j);
re.add(k);
// if(re.size()!=0)
System.out.println(j+" k~"+k);
for (Integer integer : re) {
System.out.println("rrr="+integer);
} if(k != 0){
// return starta(++j,re);
startc(++j,re); //是否带return都一样~
}
break;
}
System.out.println("@j="+j);
// k=re.get(re.size()-1); //最后一个
k=re.peek(); //返回第一个元素
return k;
} public int startd(int j,Stack<Integer> re){
int k = -2;
for (; j < 11; ) {
int i = get(j);
if(i == -1){
break; //跳出
}
k = dothing(i,j);
// re.add(k);
re.push(k);
// if(re.size()!=0)
System.out.println(j+" k~"+k+",re="+re);
for (Integer integer : re) {
System.out.println("rrr="+integer);
} if(k != 0){
// return starta(++j,re);
startd(++j,re); //是否带return都一样~
}
break;
}
System.out.println("@j="+j);
// k=re.get(re.size()-1); //最后一个
k=re.lastElement();
return k;
} private int dothing(int i, int j) {
// if(i== -1){
// return 0;
// }else{
System.out.println("j="+j);
return j;
// }
} private int get(int j) {
if(j<=2){
return 0;
}else{
return -1;
}
} /**
* @param args
*/
public static void main(String[] args) {
TestForeach t = new TestForeach();
//Map测试
// System.out.println("last="+t.starta(1,new HashMap<String, Integer>())); //List测试
// System.out.println("last="+t.startb(1,new ArrayList<Integer>())); //按次序的
/*List<Integer> ls = new ArrayList<Integer>();
ls.add(1);
ls.add(2);
ls.add(3);
ls.add(4);
ls.add(5);
for (Integer integer : ls) {
System.out.println(integer);
}*/ //队列
System.out.println("last="+t.startc(1,new LinkedList<Integer>())); //堆栈
// System.out.println("last="+t.startd(1,new Stack<Integer>()));
} }
java递归算法提前返回值带出的更多相关文章
- 在Java 线程中返回值的用法
http://icgemu.iteye.com/blog/467848 在Java 线程中返回值的用法 博客分类: Java Javathread 有时在执行线程中需要在线程中返回一个值:常规中我们 ...
- java 代码执行cmd 返回值异常 (关于JAVA Project.waitfor()返回值是1)
关于JAVA Project.waitfor()返回值是1 0条评论 Project.waitfor()返回值是1,找了很久从网上没有发现关于1的说明. 这时对源代码调试了一下,发现Project ...
- 为什么Java不能以返回值区分重载方法?
读者可能会想:"在区分重载方法的时候,为什么只能以类名和方法的形参列表作为标准呢?能否考虑用方法的返回值来区分呢?" 比如下面两个方法,虽然他们有相同的名字和形式参数,但却很容易区 ...
- JAVA是否允许返回值类型不同的重载overload或覆盖override
在看<Thinking in java>的时候,看到子类的方法和父类的方法名字相同,但是返回值类型不同,然后就开始怀疑这属于覆盖吗,到网上找到了答案,分析见接下来的网址: http://g ...
- JAVA函数的返回值类型详解以及生成随机数的例题
函数的四要素:函数名.输入.输出(返回).加工. 函数分为两种:一种是有返回值得函数,一种是没有返回值的函数. 1. 定义:没有返回值的函数:(当我不需要函数的计算结果再拿出来进行运算的时候,我就不需 ...
- 谁说java里面有返回值的方法必须要有返回值,不然会报错????
慢慢的总是发现以前的学得时候有些老师讲的不对的地方! 所以还是尽量别把一些东西说的那么绝对,不然总是很容易误导别人,特别是一些你自己根本就没有试过的东西,然后又斩钉截铁的告诉别人,这样不行,肯定不行什 ...
- 10-02 Java 形式参数和返回值的问题深入研究,链式编程
形式参数和返回值的问题: 1:形式参数和返回值的问题(理解) (1)形式参数: 类名:需要该类的对象 抽象类名:需要该类的子类对象 接口名:需要该接口的实现类对象 (2)返回值类型: 类名:返回的是该 ...
- Java 中无返回值的方法在使用时应该注意的问题
Java 中的方法是形态多样的.无返回值的方法在使用时应该规避哪些问题呢? 一.不可以打印调用或是赋值调用,只能是单独调用(非常重要): 二.返回值没有,不代表参数就没有: 三.不能return一个具 ...
- Java连载27-有返回值的方法注意点
一.方法注意点 (1)方法的调用不一定再main方法中,可以在其他方法中进行调用,只要是程序执行到的位置,都可以去调用其他方法. (2)方法调用的时候,实参和形参要求个数对应相同,数据类型对应相同,方 ...
随机推荐
- 部署wepy框架开发微信小程序
我用的是yarn,如果你使用的是npm,也可以 首先需要安装wepy命令行工具 npm install wepy-cli -g 然后在选定的位置使用脚手架工具创建wepy项目 wepy init st ...
- yii2 数据提供者 dataProvider
数据提供者 dataProvider $dataProvider = new ActiveDataProvider([ 'query' => $query, // 如何来取得数据 'pagina ...
- Java 接口 Comparable
compareTo方法是Comparable接口中唯一的方法.类实现了该接口后表明它的实例具有内在的排序关系.当该对象小于.等于或大于指定对象的时候,分别返回一个负整数.0或者正整数.如果由于指定对象 ...
- Java 深复制和浅复制
浅复制是指复制对象时仅仅复制对象本身(包括对象中的基本变量),而不复制对象包含的引用指向的对象.深复制不仅复制对象本身,而且复制对象包含的引用指向的对象. 复制对象时需要调用Object类的clone ...
- sklearn神经网络分类
sklearn神经网络分类 神经网络学习能力强大,在数据量足够,隐藏层足够多的情况下,理论上可以拟合出任何方程. 理论部分 sklearn提供的神经网络算法有三个: neural_network.Be ...
- 深入理解JVM(10)——Class文件结构
什么是“JVM”的无关性 Java具有平台无关性,也就是任何操作系统都能够运行Java代码,之所以能够实现这一点,是因为Java运行在虚拟机上,不同的操作系统都有各自的Java虚拟机,从而实现一次编译 ...
- git 一些常见问题 总结
问题1: Auto packing the repository in background for optimum performance. See "git help gc" ...
- CSS中margin边界叠加问题及解决方案
你对CSS的margin边界叠加的概念是否了解,这里和大家分享一下,当一个元素出现在另一个元素上面时,第一个元素的底边界与第二个元素的顶边界发生叠加. CSS的margin边界叠加深度剖析 边界叠加简 ...
- IE环境表单提交不跳转页面
<head> <base target="_self"></base> </head>
- centos7证书安全登录
生成一对密钥,本地私钥匹配线上主机的公钥进行登录,比密码登录更加安全方便. 本文适用MAC/Linux的本地环境 1.本地生成一对密钥 ssh-keygen -t rsa 2.把生成的公钥上传到线上主 ...