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 又进入循环里执行了会发生死循环
相关推荐
用递归的方法画分形图 用递归的方法画分形图 分形几何是数学领域里新兴的课题,如果将图形的每个元素按某种规则进行变形... stopping compilation d:\wordplay\c++\范例\fractral递归方法画分图形\stdafx.cpp 19
实验包含了三个程序,分别展示了递归在二分查找和计算幂次运算中的应用,以及分治法的一个实例。 1. 递归算法: - 二分查找(binary_search):递归地将查找范围减半,直到找到目标值或确定不存在为止。这种方法的...
汉诺塔问题是一个经典的计算机科学问题,源自一个古老的印度传说。该问题涉及到三根柱子和一堆盘子,目标是将所有盘子从第一根柱子(A柱)...通过阅读这些文件,你可以更深入地理解并实践非递归解决汉诺塔问题的方法。
一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,...
尽管递归方法直观且易于理解,但需要注意的是,由于函数调用开销,递归在某些情况下可能会导致效率较低。对于大数组,迭代方法通常比递归更高效。 总的来说,这个示例展示了如何利用递归来解决数组求和问题,它强调...
下面是具体的实现,为了更清晰看懂递归调用的过程,这里打印出来了每一次递归的过程: #!usr/bin/env python #encoding:utf-8 ''''' __Author__:沂水寒城 功能:电话号码映射 ''' phone_dict={'2':'abc','3':'def',...
通过这种方式,我们可以生成形态各异、充满随机性的树木图像,每一次运行程序都会产生独特的结果。递归树不仅展示了递归在艺术创作中的魅力,还帮助开发者理解递归概念及其在实际问题解决中的应用。 此外,这个例子...
并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。简而言之,有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,要把所有盘子一个一个移动到柱子B上,并且...
- 在第一次调用`Getmax`时,`n=5`,函数进入递归情况,比较`arr[0]`(即5)与子数组`arr[1]`到`arr[4]`的最大值。 - 递归继续进行,直到达到基本情况,即子数组只剩下一个元素。然后逐级返回,找到整个数组的最大...
这样可以减少一次性加载大量数据的需求,提高系统响应速度。 3. **ABAP表函数和内部表处理**:利用ABAP的表函数,如BOM函数模块(如`BAPI_BOM_GET_DETAIL`),配合内部表进行数据处理,逐步展开BOM层次。这种方法...
此外,递归函数的编写和理解较普通函数更为复杂,需要更加小心地处理好每一次递归调用之间的逻辑关系和状态更新。 总结来说,本文分享的递归冒泡排序算法的PHP实现,通过自增操作符的正确使用,展示了如何利用递归...
函数通过两次循环遍历数组:第一次将数组中的元素以主键为键值存储到一个新的关联数组 `$t` 中;第二次遍历时,如果当前元素有父节点,则在父节点对应的`parent`属性下添加一个引用到当前元素。这样,就形成了以父...
除了这个递归方法,PHP还提供了一个名为 `scandir()` 的函数,它可以一次性返回目录中的所有文件和目录名。然而,`scandir()` 不会自动处理子目录,如果目录结构复杂,文件数量多,可能导致性能问题,因为它会一次性...
二、就是以下的了,使用递归一次性全部加载出来(缺点,耗费服务器内存) 如果动态添加一个菜单,你当前页面不手动刷新菜单不会显示,这个问题可以考虑用websocket实现 首先是service层如何获取所有的菜单(主菜单和...
如果不是,就继续进行下一次递归。 文件“C_24.cpp”很可能是实现这个算法的C++源代码。在C++中,可以定义一个函数,接受四个整数作为参数,然后使用递归函数来探索所有可能的组合。函数内部可以包含一个循环,用于...
4. **倒推问题——小孩吃梨**:此题通过递归方法解决。程序中,每次递归计算前一天剩余梨的数量,直到找到初始购买的梨数。递归是解决此类问题的有效工具,它帮助我们从结果逆向推导出初始状态。 5. **汉诺塔问题**...
为什么要有互斥锁:由于多线程是并行的,如果某一线程取出了某一个数据将要进行操作,但它还没有那么快执行完操作,这时候如果另外一个线程也要操作这个数据,那么这个数据可能会因为两次操作而发生错误 ...
如果销售额超过了当前规则的最大值,并且存在下一个规则,函数会递归调用自身,将新的销售额和规则传递给下一次计算,直到没有更多的规则需要处理。 这种递归调用方式使得我们可以处理任意数量的提成规则,形成一个...
Java语言实现非递归实现树的前中后序遍历总结文章旨在分享Java语言中非递归实现树的前中后序遍历算法。文章首先简要介绍了树的定义,然后分别介绍了前序遍历、中序遍历和后序遍历的非递归实现算法。 一、树的定义 ...