1. /**
  2. *
  3. */
  4. package testJava.java.foreach;
  5.  
  6. import java.util.ArrayList;
  7. import java.util.LinkedList;
  8. import java.util.List;
  9. import java.util.Map;
  10. import java.util.Queue;
  11. import java.util.Stack;
  12.  
  13. /**
  14. * @author jhuang.sjtu
  15. * @function 测试循环嵌套函数返回值 递归算法
  16. * @date 2017年4月12日
  17. * @version
  18. */
  19. public class TestForeach {
  20.  
  21. public int starta(int j,Map<String,Integer> re){
  22. int k = -2;
  23. for (; j < 11; ) {
  24. int i = get(j);
  25. if(i == -1){
  26. break; //跳出
  27. }
  28. k = dothing(i,j);
  29. System.out.println(j+" re="+re.get("k"));
  30. re.put("k", k);
  31. if(k != 0){
  32. // return starta(++j,re);
  33. starta(++j,re); //是否带return都一样~
  34. }
  35. break;
  36. }
  37. k=re.get("k");
  38. return k;
  39. }
  40.  
  41. public int startb(int j,ArrayList<Integer> re){
  42. int k = -2;
  43. for (; j < 11; ) {
  44. int i = get(j);
  45. if(i == -1){
  46. break; //跳出
  47. }
  48. k = dothing(i,j);
  49. re.add(k);
  50. // if(re.size()!=0)
  51. System.out.println(j+" k~"+k);
  52. for (Integer integer : re) {
  53. System.out.println("rrr="+integer);
  54. }
  55.  
  56. if(k != 0){
  57. // return starta(++j,re);
  58. startb(++j,re); //是否带return都一样~
  59. }
  60. break;
  61. }
  62. System.out.println("@j="+j);
  63. k=re.get(re.size()-1); //最后一个
  64. return k;
  65. }
  66.  
  67. public int startc(int j,Queue<Integer> re){
  68. int k = -2;
  69. for (; j < 11; ) {
  70. int i = get(j);
  71. if(i == -1){
  72. break; //跳出
  73. }
  74. k = dothing(i,j);
  75. re.add(k);
  76. // if(re.size()!=0)
  77. System.out.println(j+" k~"+k);
  78. for (Integer integer : re) {
  79. System.out.println("rrr="+integer);
  80. }
  81.  
  82. if(k != 0){
  83. // return starta(++j,re);
  84. startc(++j,re); //是否带return都一样~
  85. }
  86. break;
  87. }
  88. System.out.println("@j="+j);
  89. // k=re.get(re.size()-1); //最后一个
  90. k=re.peek(); //返回第一个元素
  91. return k;
  92. }
  93.  
  94. public int startd(int j,Stack<Integer> re){
  95. int k = -2;
  96. for (; j < 11; ) {
  97. int i = get(j);
  98. if(i == -1){
  99. break; //跳出
  100. }
  101. k = dothing(i,j);
  102. // re.add(k);
  103. re.push(k);
  104. // if(re.size()!=0)
  105. System.out.println(j+" k~"+k+",re="+re);
  106. for (Integer integer : re) {
  107. System.out.println("rrr="+integer);
  108. }
  109.  
  110. if(k != 0){
  111. // return starta(++j,re);
  112. startd(++j,re); //是否带return都一样~
  113. }
  114. break;
  115. }
  116. System.out.println("@j="+j);
  117. // k=re.get(re.size()-1); //最后一个
  118. k=re.lastElement();
  119. return k;
  120. }
  121.  
  122. private int dothing(int i, int j) {
  123. // if(i== -1){
  124. // return 0;
  125. // }else{
  126. System.out.println("j="+j);
  127. return j;
  128. // }
  129. }
  130.  
  131. private int get(int j) {
  132. if(j<=2){
  133. return 0;
  134. }else{
  135. return -1;
  136. }
  137. }
  138.  
  139. /**
  140. * @param args
  141. */
  142. public static void main(String[] args) {
  143. TestForeach t = new TestForeach();
  144. //Map测试
  145. // System.out.println("last="+t.starta(1,new HashMap<String, Integer>()));
  146.  
  147. //List测试
  148. // System.out.println("last="+t.startb(1,new ArrayList<Integer>()));
  149.  
  150. //按次序的
  151. /*List<Integer> ls = new ArrayList<Integer>();
  152. ls.add(1);
  153. ls.add(2);
  154. ls.add(3);
  155. ls.add(4);
  156. ls.add(5);
  157. for (Integer integer : ls) {
  158. System.out.println(integer);
  159. }*/
  160.  
  161. //队列
  162. System.out.println("last="+t.startc(1,new LinkedList<Integer>()));
  163.  
  164. //堆栈
  165. // System.out.println("last="+t.startd(1,new Stack<Integer>()));
  166. }
  167.  
  168. }

java递归算法提前返回值带出的更多相关文章

  1. 在Java 线程中返回值的用法

    http://icgemu.iteye.com/blog/467848 在Java 线程中返回值的用法 博客分类: Java Javathread  有时在执行线程中需要在线程中返回一个值:常规中我们 ...

  2. java 代码执行cmd 返回值异常 (关于JAVA Project.waitfor()返回值是1)

    关于JAVA Project.waitfor()返回值是1   0条评论 Project.waitfor()返回值是1,找了很久从网上没有发现关于1的说明. 这时对源代码调试了一下,发现Project ...

  3. 为什么Java不能以返回值区分重载方法?

    读者可能会想:"在区分重载方法的时候,为什么只能以类名和方法的形参列表作为标准呢?能否考虑用方法的返回值来区分呢?" 比如下面两个方法,虽然他们有相同的名字和形式参数,但却很容易区 ...

  4. JAVA是否允许返回值类型不同的重载overload或覆盖override

    在看<Thinking in java>的时候,看到子类的方法和父类的方法名字相同,但是返回值类型不同,然后就开始怀疑这属于覆盖吗,到网上找到了答案,分析见接下来的网址: http://g ...

  5. JAVA函数的返回值类型详解以及生成随机数的例题

    函数的四要素:函数名.输入.输出(返回).加工. 函数分为两种:一种是有返回值得函数,一种是没有返回值的函数. 1. 定义:没有返回值的函数:(当我不需要函数的计算结果再拿出来进行运算的时候,我就不需 ...

  6. 谁说java里面有返回值的方法必须要有返回值,不然会报错????

    慢慢的总是发现以前的学得时候有些老师讲的不对的地方! 所以还是尽量别把一些东西说的那么绝对,不然总是很容易误导别人,特别是一些你自己根本就没有试过的东西,然后又斩钉截铁的告诉别人,这样不行,肯定不行什 ...

  7. 10-02 Java 形式参数和返回值的问题深入研究,链式编程

    形式参数和返回值的问题: 1:形式参数和返回值的问题(理解) (1)形式参数: 类名:需要该类的对象 抽象类名:需要该类的子类对象 接口名:需要该接口的实现类对象 (2)返回值类型: 类名:返回的是该 ...

  8. Java 中无返回值的方法在使用时应该注意的问题

    Java 中的方法是形态多样的.无返回值的方法在使用时应该规避哪些问题呢? 一.不可以打印调用或是赋值调用,只能是单独调用(非常重要): 二.返回值没有,不代表参数就没有: 三.不能return一个具 ...

  9. Java连载27-有返回值的方法注意点

    一.方法注意点 (1)方法的调用不一定再main方法中,可以在其他方法中进行调用,只要是程序执行到的位置,都可以去调用其他方法. (2)方法调用的时候,实参和形参要求个数对应相同,数据类型对应相同,方 ...

随机推荐

  1. BZOJ4432 : [Cerc2015]Greenhouse Growth

    对于高度相同的一段可以合并,用链表从左往右维护这些连续段,每段维护以下信息: $l,r$:表示区间的左右端点. $t,a$:表示在第$t$天结束时它的高度是$a$. $b$:当阳光在左边时它是否会长高 ...

  2. BZOJ3070 : [Pa2011]Prime prime power 质数的质数次方

    对于$a^b$,如果$b=2$,那么在$[\sqrt{n},\sqrt{n}+k\log k]$内必定能找到$k$个质数作为$a$. 筛出$n^{\frac{1}{4}}$内的所有质数,暴力枚举所有落 ...

  3. egret键盘事件监听

    document.addEventListener("keydown", function (event: any) { //alert(event.key); //console ...

  4. eclipse 安装合适的pydev插件

    http://www.cnblogs.com/yanduanduan/p/7261500.html

  5. arcgis 获得工具箱工具的个数

    import arcgisscripting import string; gp = arcgisscripting.create(9.3); ##多少个工具箱 toolboxes = gp.list ...

  6. Springboot中Aspect实现切面(以记录日志为例)

    前言今天我们来说说spring中的切面Aspect,这是Spring的一大优势.面向切面编程往往让我们的开发更加低耦合,也大大减少了代码量,同时呢让我们更专注于业务模块的开发,把那些与业务无关的东西提 ...

  7. C#保存文件为无BOM的utf8格式

    如图所示,发现用C#的 File.WriteAllLines 方法,无论怎么设置,最终生成的文件都是 PC utf8,也就是CRLF,用SVN进行提交的时候,显示左侧为utf8,右侧为utf8 BOM ...

  8. [Web 前端] 我不再使用React.setState的3个原因

    copy from : https://blog.csdn.net/smk108/article/details/85237838 从几个月前开始,我在新开发的React组件中不再使用setState ...

  9. iOS 获取IP

    #import <ifaddrs.h> //获取IP #import <arpa/inet.h> //只能获取WIFI下的IP地址 + (NSString *)getIPAdd ...

  10. 类中添加log4j日志

    在编写代码的时候需要随时查看工作日志,查看工作日志的好处就是随时能检查出错误.所以我一般就需要在编写代码的前期添加工作日志,以便更好的查看相关错误输出. 以一个springmvc小demo为例子  主 ...