精华内容
下载资源
问答
  • 1. 什么是方法(函数)java语言方法类似于其他语言的函数,是一段来完成特定功能的代码片段,2. 掌握方法的声明声明格式:修饰符 返回值类型 方法名 (参数列表){程序代码;return 返回值就;}方法中的参数:形式参数...

    1. 什么是方法(函数)

    java语言的方法类似于其他语言的函数,是一段来完成特定功能的代码片段,

    2. 掌握方法的声明

    声明格式:修饰符  返回值类型 方法名 (参数列表){

    程序代码;

    return 返回值就;

    }

    方法中的参数:

    形式参数:在方法被调用时用于接收外界输入的数据。

    实际参数:调用方法时实际传给方法的数据。

    方法中的返回值(返回值类型:方法要返回的结果的数据类型,如一个方法没有返回值,必须给出返回值类型 void)

    (返回值:方法在执行完毕后返还给调用者的数据。)

    (return语句终止方法的运行并指定要返回的数据。)

    3. 掌握方法的调用

    java语言中使用下述形式调用方法:

    对象变量名.方法名(实参列表);

    实参的数目,数据类型和次序必须和所调用方法声明的形参列表匹配。

    代码如下:

    public class Demo11{

    public static void printInfor (){

    for (int i = 0; i<10 ; i++ ){

    System.out.println(i);

    }

    }

    public static int getMax(int i , int j){

    int max=0;

    if (i>j){

    max=i;

    }

    else {

    max=j;

    }

    return max;

    }

    public static void main (String [] args){

    //System.out.println("第一次打印 ");

    //printInfor();

    //System.out.println("第二次打印 ");

    //printInfor();

    System.out.println("比较两个数输出较大的数 :");

    int res = getMax(2,4);

    System.out.println(res);

    }

    }

    4. 掌握什么是方法的重载

    方法的重载指的是一个类中可以定义有相同名字,但参数列表不同的多个方法,调用时,会根据不同的参数列表选择对应的方法;

    参数列表是指参数的类型,个数,或顺序。

    满足点认为是方法的重载:

    1. 发生在同一个类中

    2. 方法名相同

    3. 参数列表不同(类型,大小,数量)

    代码如下:

    public class Demo11{

    public static int getMax(int i , int j){

    int max=0;

    if (i>j){

    max=i;

    }

    else {

    max=j;

    }

    return max;

    }

    public static int getMax(int i , int j , int k){

    int max=(i>j) ? i : j;

    if(max>k){

    return max;

    }

    else{

    return k;

    }

    }

    public static void main (String [] args){

    System.out.println("比较两个数输出较大的数 :");

    int res1 = getMax(2,4);

    System.out.println(res1);

    System.out.println("比较三个数输出较大的树 :");

    int res2 = getMax(3,5,4);

    System.out.println(res2);

    }

    }

    5. 了解递归算法

    1. 递归调用指的是方法执行过程中出现该方法本身的调用。

    2. 递归算法关键要抓住的是:

    递归出口

    递推步向出口逼近

    代码如下:

    public class Demo12

    {

    public static int multip1(int n )//一般求阶乘的方法。

    {

    int res =1;

    for (int i=1 ;i<=n ; i++ )

    {

    res*=i;

    }

    return res;

    }

    public static int multip2(int n)

    {

    if (n==1 || n==0)

    {

    return 1;

    }

    return n*multip2(n-1);

    }

    public static void main(String [] args)

    {

    System.out.println(multip1(3));

    System.out.println(multip2(7));

    }

    }

    展开全文
  • 在计算机语言中递归算法的实现靠函数的自我调用来完成,我们所见到的大多数高级编程语言都支持这样的做法。递归算法通常有两种方式实现——普通递归和尾递归递归方法简单的来说就是方法的内部再次调用自身,递归...
    6e0df160fdc6daaa0c4f827c2351130a.png

    递归算法

    1.递归算法

    递归在计算机科学中也称为递归算法。一些问题在分解的时候会有这样的现象:解决该问题的过程是由重复的相似子过程组成,类似这样的问题我们都可以通过递归算法进行解决。在计算机语言中,递归算法的实现靠函数的自我调用来完成,我们所见到的大多数高级编程语言都支持这样的做法。

    递归算法通常有两种方式实现——普通递归和尾递归。递归方法简单的来说就是方法的内部再次调用自身,递归方法会嵌套的参与运算。这样每一个递归方法都要分配一个函数堆栈进行操作,这就是普通递归。普通递归对内存的消耗是非常大的。

    另一种递归方式被称为尾递归,尾递归对普通递归进行了优化。如果使用尾递归,需要将递归方式进行特殊的设计,它需要将递归方法在return语句后进行单独调用(即尾调用)。当采用尾递归的时候,一些编程语言会进行优化,将所有嵌套的递归方法放在同一个函数堆栈中进行,效率非常快。作为一名Java程序员,如果你无法将递归方法设计成尾递归的模式也没有任何问题,因为Java并没有对尾递归进行优化 ,Java对内存的优化是依赖于回收机制。但是如果你是一名C程序员,就需要对尾递归的写法进行掌握了。

    递归算法的优缺点是非常明显,算法实现简单、可读性强是递归算法的优点所在。缺点也同样明显,递归算法会占用大量内存空间,如果递归深度过大,容易发生内存相关问题。所以在递归算法中,有这样一句话:不用递归累死,滥用递归慢死。如何合理的使用递归算法,是递归使用的关键问题。

    2.怎么使用递归

    在设计递归算法的时候,一定要注意两点:1、设计出等价的递归公式。这一点需要我们拥有一些数学基础以及抽象概括能力,能够在复杂的运行过程中,抽象出等价的函数关系。

    2、递归退出的条件。这一点尤为重要,如果递归方法没有结束条件,就如同死循环一样,让内存和CPU直接"撑爆"。常见的递归练习方法有斐波那契数列和汉诺塔移动算法。

    2.1 斐波那契数列(Fibonacci sequence)

    斐波那契数列是经典的递归算法应用,它是一组有规律数列:"1,1,2,3,5,8,13……",当我们要获取数列中第n位的数字时,可以总结如下公式:

    当n=1或者2时,有f(n)=1,当>=3时,有f(n)=f(n-1)+f(n-2)

    下面我们要设计一个方法,输出数列的前n位的信息,n通过整型参数控制。如果我们需要一个完整的数列,就需要创建一个数列容器,将数列中的每一位数字依次计算出来,并保存到容器中,最后按照顺序从容器中输出数列(如下列Java示例):

    62e73d9b73bb121fe22d1353b5b83f5d.png

    使用数组保存斐波那契数列

    采用上面的做法好处非常明显,它能够记录每一位数列的值。当我们需要获取整个数列的时候,这样的方式是可取的。在一些时候,我们只想获取其中一位的数值,我们就不需要记录数列,这个时候使用递归的方式就非常方便(如下Java示例所示):

    e685eccc413518cf59ec3d9929e13689.png

    采用上述代码,可以直接获取到数列中第n位的数值。我们可以发现,使用递归的方式让代码更简洁、阅读起来更友好。下面我们创建两个测试方法,对上述两种方式进行测试:

    01886886724ff2bab2f6661de6b4141c.png

    运行结果:

    7e93c7f3ecd72cc624ce90c0a0743446.png

    2.2 汉诺塔(Hanoi)

    汉诺塔是一种有趣的益智游戏,很多人在儿时都玩过这种类似的玩具(如下图所示):

    fa6660ed6f070fee60c162550029311c.png

    汉诺塔

    汉诺塔的移动规则是将所有圆盘从A柱移动到C柱上,并保持上小、下大的有序顺序摆放。在移动的过程中,也需要保持这个规则。例如上图的三层汉诺塔,我们在移动的时候有如下步骤(如下图所示):

    d8f5d661821a0366e228f1ea15ec441a.png

    三层汉诺塔移动步骤

    如果有多个盘子,我们设盘子总数为n,我们可以分为两部分解决,一部分是上面的n-1个盘子,它们作为一个整体,另一部分是最下面的盘子n。它们移动可以分为三步:

    1.将第一部分的n-1个盘子的作为一个整体,从A移动到B柱上,C柱过度。

    2.接着将第n个盘子从A柱移动到C柱上。

    3.再将n-1个盘子的整体从B柱移动到C柱上,A柱过度(移动规律如下图所示)。

    f0604a1ad4c97e218998e41c06a9e24e.png

    N个盘子移动时的规律总结

    用代码实现的时候,我们就可以利用递归的方式进行移动。下面代码中,我们为了观察移动过程中,各柱子上盘子的变化情况,我们用队列来模拟柱子(实现代码如下所示):

    1fc378ade38166d18d193e48b90f90e3.png

    运行结果:

    3764c0a395c7fc7795da63ff8c425f55.png

    3.递归对循环的替代

    在程序开发过程中,很多循环方法都可以使用递归来完成,例如数字的累加和阶层的计算(如下面代码所示)。

    f990d2957e5d55c341729e785d118f49.png

    运行结果:

    9045b86f3d2bb3a66acce37fef1018dd.png

    在上述示例代码中,我们用递归和非递归两种方式解决了累加、阶乘的循环问题。除此之外,在一些数据结构算法中,递归的使用也非常多,比如二叉树的遍历、排序等。在下面的示例中,我们使用递归的方法进行冒泡排序。

    aafba346e1ab7e86fc84e5d3006e1bc9.png

    示例运行效果:

    37ce1bf41e32d5ece9d7076e36da9fc0.png

    传统的冒泡排序需要借助双层循环进行排序交换。如果使用递归的方式,可以减少一层循环。在实际的排序中,我们是不推荐使用递归进行排序的,上述示例仅作为递归算法的一种思考。

    展开全文
  • Java语言基础-递归

    2017-05-16 16:28:00
    递归调用:是指在方法执行过程出现该方法本身的调用。 分析程序从main函数开始。 递归中没有任何分支。 转载于:https://www.cnblogs.com/yangyl-justdoit/p/6862057.html...

    递归调用:是指在方法执行过程中出现该方法本身的调用。

    分析程序从main函数开始。

    递归中没有任何分支。

     

    转载于:https://www.cnblogs.com/yangyl-justdoit/p/6862057.html

    展开全文
  • 在java的学习,各位java程序员不仅要有编程的思想,也要时时刻刻积累java语言的各种算法和方法。其中,递归是java方法中的一种,想必看到这篇文章的朋友在前面已经学习掌握了java方法的相关知识点。下面这篇文章...

    在java的学习中,各位java程序员不仅要有编程的思想,也要时时刻刻积累java语言的各种算法和方法。其中,递归是java方法中的一种,想必看到这篇文章的朋友在前面已经学习掌握了java方法的相关知识点。下面这篇文章主要来学习一下java方法递归的知识。那么什么是java方法递归,递归又该如何实现呢?

    Java方法递归是指在一个方法的内部调用自身的过程,以此类推就是java方法递归的理解思想,具体来讲就是把规模大的问题转化为规模小的相似的子问题来解决。在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了函数调用它自身的情况。另外这个解决问题的函数必须有明显的结束条件,这样就不会产生无限递归的情况了。因此,java方法递归的两个条件就是,一通过递归调用来缩小问题规模,且新问题与原问题有着相同的形式;二存在一种简单情境,可以使递归在简单情境下退出。

    我们来研究一下在不使用递归的前提下,完成1到n的求和,这个应该很简单,请看下面代码:

    public class RecursionTest02 {

    public static void main(String[] args) {

    int n = 5;

    int result = accumulate(n);

    System.out.println("1到" + n + "的和是:" + result);

    }

    public static int accumulate(int n){

    int result = 0;

    for(int i = 1;i <= n; i++){

    result += i;

    }

    return result;

    }

    }

    运行结果如下图所示:

    2a2dc37b02e8074c9ba8ee6adc3189a8.png

    那么,使用递归应该怎么写呢?请看以下代码:

    public class RecursionTest03 {

    public static void main(String[] args) {

    int n = 5;

    int result = accumulate(n);

    System.out.println("1到" + n + "的和是:" + result);

    }

    public static int accumulate(int n){

    if(n == 1){

    return 1;

    }

    return n + accumulate(n - 1);

    }

    }

    运行结果如下图所示:

    89b01c6be685179d7ce2331a612bcf59.png

    要知道java方法递归有三个要素:一定有一种可以退出程序的情况;总是在尝试将一个问题化简到更小的规模;父问题与子问题不能有重叠的部分。这是实现java方法递归的条件。

    不使用java方法递归和使用方法递归的程序运行结果必然都是相同的,但是java方法递归会使代码更简单清晰,可读性更好。虽然可能java零基础的初学者不太能体会到这两个优点,但在后面的学习中,慢慢懂得在合适的程序中用合适的方法后,就会理解java方法递归的好处和作用了。

    展开全文
  • java语言基础(方法递归) 1. 方法 为了实现一个功能我们需要编写100行代码,在程序的运行过程我们不断的要使用这个功能。如果每次都重复编写这100行代码,程序会变得很臃肿,可读性也会非常差。为了解决代码...
  • 二分查找是基于有序序列的查找方法,一开始令【low - high】为整个序列的下标区间,然后每次测试当前【low - high】的中间位置mid=(low + high )/ 2,判断arr【mid】与查找值的大小。 二分查找的高效之处在于,每...
  • 什么是递归递归就是一个程序或函数在其中定义或说明有之间或者间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个原问题相似的规模较小的问题来求解,递归策略只需要少量的程序就可以描述出解题过程...
  • 在计算机语言中递归算法的实现靠函数的自我调用来完成,我们所见到的大多数高级编程语言都支持这样的做法。递归算法通常有两种方式实现——普通递归和尾递归递归方法简单的来说就是方法的内部再次调用自身,递归...
  •  java语言方法类似于其他语言的函数,是一段来完成特定功能的代码片段,  2. 掌握方法的声明  声明格式:修饰符 返回值类型 方法名 (参数列表){  程序代码;  return 返回值就;  }  方法中的参数...
  • 展开全部Java递归算法是基于Java语言32313133353236313431303231363533e78988e69d8331333365633839实现的递归算法。递归算法是一种直接或者间接调用自身函数或者方法的算法。递归算法实质是把问题分解成规模缩小的...
  • 求出区间[a,b]所有整数的质因数分解。 输入格式 输入两个整数a,b。 输出格式  每行输出一个数的分解,形如k=a1*a2*a3...(a1<=a2<=a3...,k也是从小到大的)(具体可看样例) 样例输入 3 10 样例输出 3=3 4=2*...
  • java方法03_递归结构

    2020-03-10 21:33:20
    编程语言中方法直接或间接调用方法本身,则该方法称为递归方法(核心思想就是自己调用自己)。 2.递归的使用 利用递归可以用简单的程序来解决一些复杂的问题。 递归结构包括两个部分: 定义递归头 什么时候不调用...
  • 递归是程序语言中的一个很基础的应用,学习递归对理清程序编码的思路非常有帮助所以在本章中把递归也作为学习的一部分内容。希望读者了解并掌握它的相关用法我们在中学时期都学过数学归纳法,例如求n的阶乘比如要求5!,...
  • 类似于 C 语言中的 “函数”. 方法存在的意义: 是能够模块化的组织代码(当代码规模比较复杂的时候). 做到代码被重复使用, 一份代码可以在多个位置使用. 让代码更好理解更简单. 直接调用现有方法开发, 不必重复造...
  • 类似于 C 语言中的 "函数". #方法存在的意义: 1.是能够模块化的组织代码(当代码规模比较复杂的时候). 2.做到代码被重复使用, 一份代码可以在多个位置使用. 3.让代码更好理解更简单. 4.直接调用现有方法开发, 不必...
  • Java中递归

    2017-05-27 08:40:47
    递归的含义递归算法是一种直接或者间接调用自身函数或者方法的算法,Java递归算法是基于Java语言实现的递归算法。注意:递归算法必须要有一个明确的递归结束条件 递归举例(1) 斐波那契数列斐波那契数列,又称黄金...
  • java方法递归

    2019-11-22 16:18:35
    JAVA语言中方法定义的语法格式如下: <修饰符><返回值类型><方法名>([参数类型参数名], …){ //方法体代码 } //定义无返回值,无参数方法 void say(){} //定义无返回值,有参数的方法 void ...
  • 展开全部一、递归算法基本思路:Java递归算法是基于Java语言实现的递归算法。递归算法是一e5a48de588b662616964757a686964616f31333363373166种直接或者间接调用自身函数或者方法的算法。递归算法实质是把问题分解成...
  • 一,递归 递归:指在当前方法内调用自己的这种现象。 递归使用前提:当调用...2,在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出。 3,构造方法,禁止递归。否则会出现编译报错。构造方法是创
  • (1) 递归概述: 方法定义调用方法本身的现象 (2 )递归注意事项 (3) 要有出口,否则就是死递归 (4)递归例子 import java.util.Scanner; public class MyWork { /* 求某个数的阶乘 */ public static void main...
  • Java语言基础 方法 为什么要有方法? 假设植物大战僵尸这个游戏程序,程序在运行过程,要豌豆射手要不断地发射炮弹,发射炮弹的动作需要编写100行的代码,在每次实现发射炮弹的地方都需要重复地编写这100行代码...
  • 递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的...
  • 今天说下java语言中比较常见的一种方法递归方法递归的定义 简单来说递归方法就是“自己调用自己”,通过递归方法往往可以将一个大问题简单化,最终压缩到一个易于处理的程度。对于编程来说,每次递归都会...
  • 递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的...
  • 就像C和C ++编程语言一样,java也支持递归递归是一个函数递归调用的过程。就Java编程而言,递归是允许方法调用自身的过程。考虑示例:在此示例,我们正在计算给定数字的阶乘。假设有一个数字5,则其阶乘将为1x2...
  • 递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的...
  • 递归作为一种算法在程序设计语言中广泛应用。 递归需具备的条件: 子问题须与原始问题为同样的事,且更为简单; 不能无限制调用本身,须有个出口,化简为非递归状态处理; 递归的次数不能太多,否则容易造成栈内存...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 525
精华内容 210
关键字:

java语言中方法递归

java 订阅