循环则只能遍历同一层的所有节点,如果下属节点的层数已知或只需要遍历有限层数的节点,那么通过多重循环也可以实现遍历多层节点的目的,但循环无法对层数未知的树结构进行遍历。
public class MyTest {/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成的方法存根
double[] A={3.75,3.1}
double[] B={3.75,3.95}
double[] C={2.33,3.8,15}
mul(0,A,B,C)
//mul(0,0,0,A,B,C)
}
private static void mul(int i,double[] A,double[] B,double[] C)
{
if(i<A.length)
{
for(int j=0j<B.lengthj++)
{
for(int k=0k<C.lengthk++)
{
System.out.println(A[i]+"*"+B[j]+"*"+C[k])
}
}
i++
mul(i,A,B,C)
}
java常用递归代码
//Top代表树的的根节点
private void showNodeList(Collection<Node>topList){
for(Node top:topList)
{
//显示顶点
System.out.println(top.getName())
//显示子树
showNodeList(top.getChildren())
}
}
所谓递归就是循环,就是调用你本身的循环体,需要一个出口,不然就是死循环。
请看一个简单的例子
说明:此方法就是调用了递归,recursion(car,i)自已调用了自已的方法。从此方法中,可以先对它进行了传递参数,分别是car(值),i(对递归次数的控制),car=2*(car-3000)这是对car第一次的计算,用if判断是否结束,在这个if判断中把每次递归都放入car,进行计算的值返回。这个递归直到12次,计算car的值都放入了car中,打印出car的总和,结束(出口)
缺点:由此可见递归就是调用自已的,方法与方法之间,类与类之间都可以。当然那我们在使用其的时候,要声明一个操作的终结点(出口)。递归调用会增加内存负担,因为每次调用一回方法都要开辟一段栈空间(先进后出),知道该方法满足条件后才释放。有结束条件了,是非常好的,否则你的递归程序会因为栈空间不足而中止的。
坏处:因为递归需要你的操作系统中的堆和栈,所以空间消耗上要比非递归代码要大的多,而且递归深度太大了,可能系统支撑不了。
用一个方法就可以取到下面所有的子树的集合但方法中传递的时候传递的参数必须是集合,然后遍历此集合,让每一元素通过select * from Id=??去那其下面的子集合,然后遍历出来的子集合直接作为一个参数传递你写的这个方法中,也就是再此调用下此方法,这样最后就可以把每一个分支中的集合都传递过来,最后拿到每个分支中的最后一个分支对象传递过来后,就发现这就是要For循环得到的对象。
Java程序调用自身叫做递归,所以不是一定要静态。