看尚学堂的视频总觉得不是太懂。
我自己的理解是它好像是循环反过来的意思,一般循环都是从小的开始,例如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)
递归(英语:Recursion),又译为递回,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。递归一词还较常用于描述以自相似方法重复事物的过程。例如,当两面镜子相互之间近似平行时,镜中嵌套的图像是以无限递归的形式出现的。也可以理解为自我复制的过程。
在数学和计算机科学中,递归指由一种(或多种)简单的基本情况定义的一类对象或方法,并规定其他所有情况都能被还原为其基本情况。
例如,下列为某人祖先的递归定义:
某人的双亲是他的祖先(基本情况)。
某人祖先的双亲同样是某人的祖先(递归步骤)。
斐波那契数列是典型的递归案例:
F0=0(初始值)
F1=1(初始值)
对所有大于1的整数n:Fn=Fn−1+Fn−2(递归定义)
在Java中,方法自己调用自己则是递归。
例如:
pubic int fab(int n) {代码是典型的一个递归方法算阶乘。
1、简单来说递归就是在方法中调用自己;
2、比如例子说运行步骤:当n=5的时候,f()方法运算5*f(4),又调用f(4)继续5*4*f(3)......最后等于5*4*3*2*1=120;
还有什么不明白可以继续追问。
递归:就是自己调自己,但是如果没终止条件会造成死循环,所以递归代码里要有结束自调自的条件,这样就创造了有限次的循环(虽然代码中你看不到for或foreach但是有循环发生)
//递归例子,用JavaScript实现1~100的累加:java递归是什么意思?
递归指在程序执行时,方法调用自身的行为。它是通过函数体获得了许多分支,而每个分支都与函数调用关联。这意味着函数将生成多个调用的变量,这些变量实际上会在函数返回之前生成结果。换句话说,递归是指一种程序设计的技术,该技术允许函数调用自身,这样它可以重复执行某些代码而无需编写循环。递归因为它的...
谁能说说JAVA的递归是什么意思?
一、含义 程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要...
在JAVA中什么是递归?有什么用?
Java方法递归是指在一个方法的内部调用自身的过程,以此类推就是java方法递归的理解思想,具体来讲就是把规模大的问题转化为规模小的相似的子问题来解决。在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了函数调用它自身的情况。另外这个解决问题的函数必须有明显的结...
java递归是什么意思?怎么用?通过案例来身临其境的学习java递归
Java递归是一种技术,用于解决具有重复子问题的问题,其核心是函数调用自身。此方法能让代码简洁明了,但使用不当可能引发程序异常或性能问题。理解递归的关键在于辨认问题中的递归终结条件和递归步骤。下面,我们以简单的“洗脸”为例来解释递归。假设洗脸的步骤可以简化为:打湿、涂洗面奶、冲洗和擦干。将...
java中的递归到底是什么来的啊 本人初学的 要多的简单的例子啊 没有...
递归就是直接或者间接对自身进行调用。。1.先想参数 2.递归的条件 3.递归的边界 以后遇到递归题,就从这三个方面思考..容易些。顺便 给你一道杨辉三角形的题。。\/ 利用递归输出杨辉三角 \/ public class YangHui { public static void main(String args[]){ int hang=0;\/\/行数 int dangQian =...
java中递归算法是什么怎么算的?
Java递归算法是基于Java语言实现的递归算法。递归算法是一种直接或者间接调用自身函数或者方法的算法。递归算法实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法表示问题的解。递归往往能给我们带来非常简洁非常直观的代码形式,从而使我们的编码大大简化,然而递归的思维确实跟我们的常规思维相逆...
java递归是什么意思?怎么用?通过案例来身临其境的学习java递归
Java递归是一种函数调用自身的技术,用于解决具有重复子问题的问题。它能简化代码,但需谨慎使用以避免潜在的错误和性能问题。接下来,让我们通过实际案例来理解递归的运用。想象每天早晨的洗脸过程:首先打湿脸(washFace()调用wetFace()),然后涂洗面奶(applyCleanser()),再冲洗干净(rinseOff()),...
java递归:1,递归是什么?不求定义,求个简单的实际例子;2,以下代码为什么...
递归就是在某种情况下,方法调用自己 你那个代码是:1*2*3*4*5 算出来就是120了
java中什么是递归,什么情况用递归,举个简单的例子
阶乘 就是一个递归。方法一直调用自身的方法 只是最后要给一个出口避免死循环
java递归,问题。请问这2个方法什么意思,我怎么就不明白递归的原理,求...
递归调用就是依次改变参数值,重复调用自身,当满足某个条件的时候开始逐层返回,直到最后返回结果。递归调用在解决很多项的 有规律的数值的加减乘除法是很好的一种方法,因为它的代码量很小,然后能实现比较复杂的计算,被很多人所喜欢。你的程序里面的:public static int getSum(int n){ if(n==1)...