馨怡FANG
递归就是循环。用递归完全是因为懒惰。这样程序员可以少写一些代码。现代程序要求高可读性与低资源占用。递归完全违反了这两点。所以一般运用在不太占用资源且很普遍运用的地方。代码?我随意写一个。最简单的循环i到n可以在if中加循环体。public a(int i,int n){ if(i
容嬷嬷201
Java递归算法是基于Java语言实现的递归算法。递归算法是一种直接或者间接调用自身函数或者方法的算法。递归算法实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法表示问题的解。递归往往能给我们带来非常简洁非常直观的代码形式,从而使我们的编码大大简化,然而递归的思维确实跟我们的常规思维相逆的,通常都是从上而下的思维问题,而递归趋势从下往上的进行思维。
二、递归算法解决问题的特点:
【1】递归就是方法里调用自身。
【2】在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
【3】递归算法代码显得很简洁,但递归算法解题的运行效率较低。所以不提倡用递归设计程序。
【4】在递归调用的过程中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等,所以一般不提倡用递归算法设计程序。
【5】在做递归算法的时候,一定把握出口,也就是做递归算法必须要有一个明确的递归结束条件。这一点是非常重要的。其实这个出口就是一个条件,当满足了这个条件的时候我们就不再递归了。
三、代码示例:
代码执行流程图如下:
此程序中n=5就是程序的出口。
Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
小红红黑黑
递归做为一种算法在程序设计语言中广泛应用.是指函数/过程/子程序在运行过程中直接或间接调用自身而产生的重入现象.递归是计算机科学的一个重要概念,递归的方法是程序设计中有效的方法,采用递归编写程序能使程序变得简洁和清晰.。给你个求阶乘的例子:public long factorial(long n){//求n! if(n==0)return 1; else return n*factorial(n-1);//利用递归n!=n*(n-1)!直到0}比较经典的递归例子,汉诺塔: public class T2010_7_9{ static int count=1; public static void move(char j,char k){ System.out.println("第"+(T2010_7_9.count++)+"步:将一个盘子从柱子"+j+"拿到柱子"+k); } public static void hanoi(char a,char b,char c,int n){ if(n==1)move(a,c); else{hanoi(a,c,b,n-1); move(a,c); hanoi(b,a,c,n-1); } } public static void main(String[] args){ char a='A',b='B',c='C'; int num=3;//盘子的个数 hanoi(a,b,c,num); } }
TracyJunli
import java.util.Scanner;public class DuProblem { public static void main(String[] args) { int input = 0; Scanner scanner = new Scanner(System.in); while (true) { System.out.print("Enter a positive integer (-1 to quit): "); input = scanner.nextInt(); if (input == -1) { break; } StringBuffer sb = new StringBuffer(input + " = "); findSum(input, sb); System.out.println(sb.toString()); } } private static void findSum(int num, StringBuffer sb) { if (num == 0 || num == 1) { if (num == 1) { sb.append(num); } else { sb.deleteCharAt(sb.length() - 1); } } else { int squar = (int) Math.pow((int) Math.sqrt(num), 2); sb.append(squar + "+"); findSum(num - squar, sb); } }}我写了一个,但是没有控制4个数量.
楠木青城……
java常用递归代码
//Top代表树的的根节点
private void showNodeList(Collection
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程序调用自身叫做递归,所以不是一定要静态。
优质英语培训问答知识库