谁能说说JAVA的递归是什么意思?

看尚学堂的视频总觉得不是太懂。
我自己的理解是它好像是循环反过来的意思,一般循环都是从小的开始,例如int i=1;i<10;i++ 执行是从1开始的,而递归则相反。是吗?

请高手们举个简单的例子说下,越简单越好。看这个递归要分来分去的头都大了。

一、含义

程序调用自身的编程技巧称为递归( 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)

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-08-23

递归(英语: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);
}

第2个回答  2017-08-11
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;

还有什么不明白可以继续追问。

第3个回答  2017-07-20
所谓递归就是指一个方法直接或间接调用自身的行为。递归分为直接递归和间接递归,直接递归就是指方法在执行中调用了自身。间接递归是指方法在执行中调用了其他方法,而其他方法在执行中有调用了该方法。
第4个回答  2019-03-02

递归:就是自己调自己,但是如果没终止条件会造成死循环,所以递归代码里要有结束自调自的条件,这样就创造了有限次的循环(虽然代码中你看不到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);

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网