`

分享最近一次递归的方法

 
阅读更多

    private static void createSheet(HSSFWorkbook wb, String[] head, String[][] body, String sheetName, int sheetIndex, int start) {
        int rowIndex = 0;
        System.out.println("@@@@@@@@@@" + sheetIndex);
        System.out.println("##########" + start);
        HSSFSheet sheet = wb.createSheet(sheetName + sheetIndex);   
        System.out.println("sheetName"+ sheet.getSheetName())  ;

        HSSFRow row = sheet.createRow(rowIndex);
        createHeadRow(wb,row, head);
        for(int i=start; i< body.length; i++) {
            if(rowIndex > 1000) {
                System.out.println("^^^^^^^^^" + rowIndex);
                createSheet(wb,head,body,sheetName,sheetIndex +1, i);
                System.out.println("&&&&&&&&&" + i );
                return;
            }
            rowIndex++;
            String[] array = body[i];
            HSSFRow r = sheet.createRow(rowIndex);
            createBodyRow(wb,r, array);
        }
    }

 

 

打出来的log是

@@@@@@@@@@1
##########0
sheetNameSubmittedMatches1
^^^^^^^^^1001
@@@@@@@@@@2
##########1001
sheetNameSubmittedMatches2
^^^^^^^^^1001
@@@@@@@@@@3
##########2002
sheetNameSubmittedMatches3
^^^^^^^^^1001
@@@@@@@@@@4
##########3003
sheetNameSubmittedMatches4
^^^^^^^^^1001
@@@@@@@@@@5
##########4004
sheetNameSubmittedMatches5
&&&&&&&&&4004
&&&&&&&&&3003
&&&&&&&&&2002
&&&&&&&&&1001

关键的地方是return语句(见加粗), 如果没有return, 则递归无法退出,因为看l蓝色加粗可知,在全部处理完body后,会继续回到前面一层往下执行, 而且每一层的 i 的值都不一样,说明内存里是不同的变量.

 

若没有return的话, log是

@@@@@@@@@@1
##########0
sheetNameSubmittedMatches1
^^^^^^^^^1001
@@@@@@@@@@2
##########1001
sheetNameSubmittedMatches2
^^^^^^^^^1001
@@@@@@@@@@3
##########2002
sheetNameSubmittedMatches3
^^^^^^^^^1001
@@@@@@@@@@4
##########3003
sheetNameSubmittedMatches4
^^^^^^^^^1001
@@@@@@@@@@5
##########4004
sheetNameSubmittedMatches5
&&&&&&&&&4004
^^^^^^^^^1002
@@@@@@@@@@5
##########4005

 

可以看出在最里面一层的递归结束后, i = 4004 +1 又进入循环里执行了会发生死循环

0
4
分享到:
评论

相关推荐

    用递归的方法画分形图

    用递归的方法画分形图 用递归的方法画分形图  分形几何是数学领域里新兴的课题,如果将图形的每个元素按某种规则进行变形... stopping compilation d:\wordplay\c++\范例\fractral递归方法画分图形\stdafx.cpp 19

    递归案例分享

    一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,...

    Python基于递归实现电话号码映射功能示例

    下面是具体的实现,为了更清晰看懂递归调用的过程,这里打印出来了每一次递归的过程: #!usr/bin/env python #encoding:utf-8 ''''' __Author__:沂水寒城 功能:电话号码映射 ''' phone_dict={'2':'abc','3':'def',...

    PHP递归实现汉诺塔问题的方法示例

    并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。简而言之,有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,要把所有盘子一个一个移动到柱子B上,并且...

    layui递归实现动态左侧菜单

    二、就是以下的了,使用递归一次性全部加载出来(缺点,耗费服务器内存) 如果动态添加一个菜单,你当前页面不手动刷新菜单不会显示,这个问题可以考虑用websocket实现 首先是service层如何获取所有的菜单(主菜单和...

    JavaScript累加、迭代、穷举、递归等常用算法实例小结

    本文实例讲述了JavaScript迭代、迭代、穷举、递归等常用算法。分享给大家供大家参考,具体如下: 累加和累积 累加:将一系列的数据加到一个变量里面。最后的得到累加的结果 比如:将1到100的数求累加和 小球从高处落...

    Python多线程操作之互斥锁、递归锁、信号量、事件实例详解

    为什么要有互斥锁:由于多线程是并行的,如果某一线程取出了某一个数据将要进行操作,但它还没有那么快执行完操作,这时候如果另外一个线程也要操作这个数据,那么这个数据可能会因为两次操作而发生错误 ...

    JavaScript实现JSON合并操作示例【递归深度合并】

    分享给大家供大家参考,具体如下: 为什么我会想到写这几行代码 在实际工作中,我们会使用许多或自主开发或第三方的工具,有些工具的配置文件相当细节,使用频率低倒也罢了,使用频率高的话必然造成很多代码冗余。...

    详解如何在JS代码中消灭for循环

    Edit: 在我入职第三家公司的第一天,看到代码库里面一堆的 for 循环,内心有些崩溃,于是做了一次技术分享,展示怎样在代码中避免 for 循环。这篇文章是那次分享的总结。本文并不完美,其中递归的部分其实不应该在...

    Python(+numpy)实现对9*9数独问题(单解或多解)的快速递归求解

    (=== 分享一下这两天断断续续写的解9*9数独问题的经历及源码,第一次写博客,很多功能不太会用,也会有很多不到位的地方,谢大家指正!===) # 整活 百度 wd=世界最难数独 输入方式及运行结果,运行时间(完全遍历...

    用php迭代器来实现一个斐波纳契数列函数类.zip

    分享一个用php迭代器来实现一个斐波纳契数列函数类。...这里现学现卖,用PHP的迭代器来实现一个斐波纳契数列,几乎没有什么难度,只是把类里的next()方法重写了一次。注释已经写到代码中,也是相当好理解的。

    Python使用循环神经网络解决文本分类问题的方法详解

    卷积网络的输入只有输入数据X,而循环神经网络除了输入数据X之外,每一步的输出会作为下一步的输入,如此循环,并且每一次采用相同的激活函数和参数。在每次循环中,x0乘以系数U得到s0,再经过系数W输入到下一次,...

    Python走楼梯问题解决方法示例

    本文实例讲述了Python走楼梯问题解决方法。...分析:问题可以从最后一次是走1步还是两步,反向考虑 ''' def take_stairs_recursive(n): if n == 1: return 1 elif n == 2: return 2 else: return take_stairs_recur

    CLR.via.C#.(中文第3版)(自制详细书签)Part2

    享有全球盛誉的编程专家Jeffrey Richter,这位与Microsoft .NET开发团队合作长达8年时间的资深顾问,在本书中和读者分享他编程生涯中积累的所有丰富经验和心得,他的独到、睿智的见解,他的远见卓识,为开发人员构建...

    PHP+MySQL实现无极限分类栏目的方法

    一个非常简单清晰简单的无极限分类范例,带缩进效果,只需查询一次数据表,然后递归遍历结果集,就可以了,要在php中实现栏目缩进显示可以参考一下。 $sql = 'select * from cat order by cat_id desc'; $list = $...

    javascript基于牛顿迭代法实现求浮点数的平方根【递归原理】

    今天在网上看到一则利用牛顿迭代法求浮点数的平方根的方法,发现很好,比一些语言自带的sqrt方法运行要快,在这里备份一下,以待后用,这里稍微做了些改动. 首先是牛顿迭代法原理: 比如我们要求a的平方根,首先随便猜一个...

    Java分治归并排序算法实例详解

    许多有用的算法在结构上是递归的:为了解决一个给定的问题,算法一次或多次递归地调用其自身以解决紧密相关的若干子问题。这些算法典型地遵循分治法的思想:将原问题分解为几个规模较小但类似于原问题的子问题,递归...

    UltraCompareX 22.1.0.18 文件内容比较工具

    文本文件比较功能包括一次对两个或三个文本文件进行二进制和文本比较,并能够合并比较文件之间的文本差异。文件夹比较支持比较本地/网络目录(以及具有递归文件夹比较的子目录)和zip文件比较,并且与文本/二进制...

    mavenRepositoryClearTool.zip

    具体的bug原因忘记了,当时也忘记记录了,大概是递归删除包下错误文件时错误的进行了一次对上级目录的删除调用造成的 (其效果类似于-rm -rf,那个bug差点把我测试用的F盘格式化了), 第74行备注的bug已经修复,放心...

    传智播客扫地僧视频讲义源码

    04_字符串反转_方法2递归逆序(3个点)_传智扫地僧 05_考试题解答和项目开发代码书写手法 06_一级指针易错模型分析_重点 07_C语言中的const知识点总结 08_指针的输入和输出模型 09_课堂答疑_指针所指向内存释放 10_...

Global site tag (gtag.js) - Google Analytics