递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于...
谁能说说JAVA的递归是什么意思?
一、含义
程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。
二、递归算法解决问题的特点:
【1】递归就是方法里调用自身。
【2】在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
【3】递归算法代码显得很简洁,但递归算法解题的运行效率较低。所以不提倡用递归设计程序。
【4】在递归调用的过程中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等,所以一般不提倡用递归算法设计程序。
【5】在做递归算法的时候,一定把握出口,也就是做递归算法必须要有一个明确的递归结束条件。这一点是非常重要的。其实这个出口就是一个条件,当满足了这个条件的时候我们就不再递归了。
三、示例程序:
使用Java代码求5的阶乘。(5的阶乘=5*4*3*2*1)
[java] view plain copy
package org.wxp.recursion;
/**
* 计算5的阶乘(result = 5*4*3*2*1)
* @author Champion.Wong
*
*
*/
public class Test01 {
public static void main(String[] args) {
System.out.println(f(5));
}
public static int f(int n) {
if (1 == n)
return 1;
else
return n*f(n-1);
}
}
此题中,按照递归的三个条件来分析:(1)边界条件:阶乘,乘到最后一个数,即1的时候,返回1,程序执行到底;(2)递归前进段:当前的参数不等于1的时候,继续调用自身;(3)递归返回段:从最大的数开始乘,如果当前参数是5,那么就是5*4,即5*(5-1),即n*(n-1)
2017-09-01
递归(英语:Recursion),又译为递回,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。递归一词还较常用于描述以自相似方法重复事物的过程。例如,当两面镜子相互之间近似平行时,镜中嵌套的图像是以无限递归的形式出现的。也可以理解为自我复制的过程。
在数学和计算机科学中,递归指由一种(或多种)简单的基本情况定义的一类对象或方法,并规定其他所有情况都能被还原为其基本情况。
例如,下列为某人祖先的递归定义:
某人的双亲是他的祖先(基本情况)。
某人祖先的双亲同样是某人的祖先(递归步骤)。
斐波那契数列是典型的递归案例:
F0=0(初始值)
F1=1(初始值)
对所有大于1的整数n:Fn=Fn−1+Fn−2(递归定义)
在Java中,方法自己调用自己则是递归。
例如:
pubic int fab(int n) { if (n <= 1) return n; return fab(n-1) + fab(n-2);}2017-08-23
public class FactorialTest {public static void main(String[] args) {System.out.println(f(5));}private static int f(int n) {if (n == 1) {return 1;} else {return n *f((n - 1));}}}代码是典型的一个递归方法算阶乘。
1、简单来说递归就是在方法中调用自己;
2、比如例子说运行步骤:当n=5的时候,f()方法运算5*f(4),又调用f(4)继续5*4*f(3)......最后等于5*4*3*2*1=120;
还有什么不明白可以继续追问。
2017-08-11
所谓递归就是指一个方法直接或间接调用自身的行为。递归分为直接递归和间接递归,直接递归就是指方法在执行中调用了自身。间接递归是指方法在执行中调用了其他方法,而其他方法在执行中有调用了该方法。2017-07-20
递归:就是自己调自己,但是如果没终止条件会造成死循环,所以递归代码里要有结束自调自的条件,这样就创造了有限次的循环(虽然代码中你看不到for或foreach但是有循环发生)
//递归例子,用JavaScript实现1~100的累加:function add(num){ if(num<=1){ return 1; } return num+add(num - 1);}var res = add(100);console.log(res);2019-03-02
递归就是按照我们的想法来思考问题。把大规模问题逐渐缩小。比如n的阶乘递归问题就很经典了。首先思考如何缩小问题规模:n的阶乘=n-1的阶乘*n,然后定义个边界条件,当n=0是,方法值为1,这样就可以了。和循环完全不同。你也可以找找汉诺塔的递归问题,看看它的思想。2011-09-07
你的理解错了, 递归就是方法自己调用自己,然后再给一个停止的条件。如果没有条件的话方法会一直不定的运行下去,会形成一个死循环。
递归例子:
int i = 0;
public void test(){
i++;
if(i < 100){
System.out.println(i);
test();
}
}2011-09-07
(1) 递归就是在过程或函数里调用自身;
(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
递归算法一般用于解决三类问题:
(1)数据的定义是按递归定义的。(Fibonacci函数)
(2)问题解法按递归算法实现。(回溯)
(3)数据的结构形式是按递归定义的。
下面这个例子以递归的方法计算n的阶乘。
public class Test {
public static int factorial(int n){
if(n == 0){
return 1;
}else{
return n * factorial(n-1);
}
}
public static void main(String[] args) {
System.out.println(factorial(3));
}
}
2011-09-09
简单的说就是自己调用自己.你往这方面想可能会更容易些.2011-09-07
自己调用自己,类似循环。2017-07-31
比如阶乘吧
通常代码如下
int f(int i){
if i <= 1 return 1; // 结束条件
else return i * f(i-1); // 压栈,继续调用本方法
}
递归通常不直接返回计算结果,利用堆栈将i和f(i-1)的结果入栈。
所以过程如下:
当输入i = 3;
则 为 3 * f(3-1)
继续调用----2 * f(2-1)
继续调用,结束 ----------1
3 * 2 * 1 = 62011-09-07
Java的递归和其它语言的递归都一样,递归是一种算法,相信楼主知道,递归的意思也就是在函数中使用自身,也就是所谓的产生重入现象。
一个例子,相信楼主可以看懂,看懂后也就理解了递归的意思:
public static void main(String[] args) {
display(5);
}
public static void display(int n){
if(n<=0)return;
for(int i=0;i<n;i++)
System.out.print(" "+n);
System.out.println();
display(n-1);
}2011-09-07