精华内容
下载资源
问答
  • import java.io....public class HuoNuoTa {/*** * 汉诺塔要求:三个柱子A:3个盘子 B:没有 C:没有,* A借助B将盘子移到C,柱子上的盘子由下往上编号依次由大到小,移动过程必须小的在上* 使用递归思想完...

    import java.io.BufferedReader;

    import java.io.IOException;

    import java.io.InputStreamReader;

    public class HuoNuoTa {

    /**

    *

    * 汉诺塔要求:三个柱子A:3个盘子 B:没有 C:没有,

    * A借助B将盘子移到C,柱子上的盘子由下往上编号依次由大到小,移动过程必须小的在上

    * 使用递归思想完成

    * 3个盘子的时候:移动7次,1:A--C,2:A--B,3:C--B,4:A--C,5:B--A,6:B--C,7:A--C

    *

    *

    * @param args

    */

    // 定义一个统计移动次数的变量

    static int c = 0;

    public static void main(String[] args) throws IOException {

    // 创建基本输入流对象

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    System.out.println("请输入盘子的数量:");

    // 输入盘子数量

    int n = Integer.valueOf(br.readLine());

    // 定义三个柱子编号为A、B、C

    char A = 'A';

    char B = 'B';

    char C = 'C';

    // 调用方法

    hanNuoTa(n, A, B, C);

    }

    public static void hanNuoTa(int n, char A, char B, char C) {

    // 判断是否一个盘子

    if (n == 1) {

    // 一个盘子时直接由A--C

    System.out.println(++c + "次,编号为" + n + "的盘子由" + A + "移到" + C);

    } else {

    // 大于一个盘子时,先把A上的n-1个借助C移到B

    hanNuoTa(n - 1, A, C, B);

    System.out.println(++c + "次,编号为" + n + "的盘子由" + A + "移到" + C);

    // 再把B上的n-1个盘子借助A移到C

    hanNuoTa(n - 1, B, A, C);

    }

    }

    }

    展开全文
  •  //输入姓名,在map集合查找是否存在,存在则验证密码,不存在则使用递归,返回重新输入 Set sets = m.keySet(); for (String s : sets) { if (name.equals(s)) { martchPassWord(s, m); return; } } ...

    1

    // 用户信息的持久化保存(序列化) public void save(Map m) throws Exception {  FileOutputStream fos = new FileOutputStream("User.txt");  ObjectOutputStream oos = new ObjectOutputStream(fos);  oos.writeObject(m);  oos.flush();  oos.close(); }

    3df55187e7b2273ccde277e6a24cbd20.png

    2

    // 用户信息的读取(反序列化) public Map read() throws Exception {  FileInputStream fis = new FileInputStream("User.txt");  ObjectInputStream ois = new ObjectInputStream(fis);  Map temp = (HashMap) ois.readObject();  ois.close();  return temp; }

    // 学生信息 public void list(Map m) {  System.out.println("列表如下:");  Set> sets = m.entrySet();  for (Entry s : sets) {   System.out.println(s);  } }

    b53b868f741e0ed27713da88dc8ec046.png

    3

    // 验证并返回注册姓名 public static String nameLenght(Map m) {  System.out.println("请输入3位以上字母和数字组成的姓名:");  String name = sc.next();//  if (name.length() < 3) {//   System.out.println("注册姓名小于三位,请重新输入:");//   return nameLenght(m);//  }  //验证姓名长度大于3并且由字母数字组成  if(!(name.matches("\\w{3,}"))){   System.out.println("注册姓名不符合格式!");   return nameLenght(m);  }  // 用于验证注册姓名是否存在  Set sets = m.keySet();  for (String s : sets) {   if (s.equals(name)) {    System.out.println("用户名已存在,请重新输入:");    return nameLenght(m);   }  }  return name; }

    308f88b304d5fb61913c7cf6692bc5f3.png

    4

    // 验证密码长度大于6 public String passWordLenght() {  System.out.println("请输入6位及以上密码:");  String passWord = sc.next();  if (passWord.length() < 6) {   System.out.println("密码长度小于6,请重新输入:");   //如果密码不符合要求,返回重新输入,验证,递归   return passWordLenght();  }  System.out.println("请再次确认密码:");  String passWord1 = sc.next();  if (!(passWord.equals(passWord1))) {   System.out.println("两次密码不一致,请重新输入:");   return passWordLenght();  }  System.out.println("注册成功!");  return passWord1; }

    c7a98a0c6b7e6900d636ace24514b794.png

    5

    // 用户登录验证 public void martch(Map m) {  System.out.println("请输入姓名:");  String name = sc.next();  //输入姓名,在map集合查找是否存在,存在则验证密码,不存在则使用递归,返回重新输入  Set sets = m.keySet();  for (String s : sets) {   if (name.equals(s)) {    martchPassWord(s, m);    return;   }  }  System.out.println("姓名不存在,请重新输入");  martch(m); }

    dc0d0dc8cbcf3d4b8dc0670929a7c0f3.png

    6

    // 用户密码验证 public void martchPassWord(String name, Map m) {  System.out.println("请输入密码");  String passWord = sc.next();

    if (passWord.equals(m.get(name))) {   System.out.println("登录成功!");   return;  }  if (!(passWord.equals(m.get(name)))) {   System.out.println("密码不正确,请重新输入");   martchPassWord(name, m);  } } // 学生删除 public void delStudents(Map m) {  System.out.println("请输入要删除的学生姓名:");  String name = sc.next();  Set sets = m.keySet();  for (String s : sets) {   if (s.equals(name)) {    m.remove(s);    System.out.println("删除成功!");    return;   }  }  System.out.println("输入姓名不存在,删除失败!");  delStudents(m); }

    295eddec80ae8666cd59065903ed6f2d.png

    END

    展开全文
  • 创建java递归的方法:首先创建明确的递归结束条件;...创建java递归的方法:程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或...

    创建java递归的方法:首先创建明确的递归结束条件;然后设置判断条件,代码为【private static int sumNum(int n){if (n == 1){return 1;}return n + sumNum(n-1)}】。

    2cf9e3b5cb48d6be751a49e27db44e2b.png

    创建java递归的方法:

    程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。

    首先,我们来看一下最简单的求和例子。public static void main(String[] args) {

    System.out.println(sumNum(100)); //输出:5050

    }

    //求1-100的和

    private static int sumNum(int n) {

    if (n == 1) {

    return 1;

    }

    return n + sumNum(n-1);

    }

    下面我们用递归实现斐波那契数列。

    斐波那契数列,又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用。//用递归求解

    public static int fib(int n) {

    if (n == 0)

    return 0;

    if (n == 1 || n == 2)

    return 1;

    return fib(n - 1) + fib(n - 2);

    }

    //用循环求解

    public static int fib2(int n) {

    int a = 0, b = 1, c = 1;

    if (n == 0)

    return 0;

    if (n == 1 || n == 2)

    return 1;

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

    c = a + b;

    a = b;

    b = c;

    }

    return c;

    }

    //用数组求解

    public static int fib3(int n) {

    int[] arr = new int[n + 1];

    arr[0] = 0;

    arr[1] = 1;

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

    arr[i] = arr[i - 1] + arr[i - 2];

    }

    return arr[n];

    }

    下面再来看一下另外一个例子,计算阶乘。

    阶乘是基斯顿·卡曼(Christian Kramp,1760~1826)于 1808 年发明的运算符号,是 数学术语。

    一个正整数的 阶乘( 英语: factorial)是所有小于及等于该数的 正整数的 积,并且有0的阶乘为1。 自然数n的阶乘写作n!。 亦即n!=1×2×3×...×n。阶乘亦可以 递归 方式定义:0!=1,n!=(n-1)!×n。//用递归计算阶乘

    public static int jc(int n)

    {

    //结束条件

    if ( n == 1)

    return 1;

    //递归条件

    return n * jc(n-1);

    }

    //用for循环实现阶乘

    public static int jc2(int n)

    {

    int sum = 1;

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

    sum *= i;

    }

    return sum;

    }

    递归的条件:

    1、 结束条件: 必须有一个明确的递归结束条件,称为递归出口。

    2、 递归条件: 递归的运算法则.

    递归的特点:

    1、简洁明了: 递归算法,一般让人一眼就能看出运算结构,很接近于数学自然语言。

    2、内存消耗大:在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。所以一般不提倡用递归算法设计程序。

    展开全文
  • 递归函数在Java语言中得到了广泛的应用,它使得程序的编写过程更加的清晰明了。对Java初学者来讲,递归函数是需要学习的一个重要知识点。本文将附上案例和演示代码,具体...简单来说,递归方法是调用自身的方法。在...

    递归函数在Java语言中得到了广泛的应用,它使得程序的编写过程更加的清晰明了。对Java初学者来讲,递归函数是需要学习的一个重要知识点。本文将附上案例和演示代码,具体为大家介绍递归函数的概念、要素以及和循环的区别。想要学习递归函数的小伙伴,赶紧一起来梳理下相关的知识点吧!

    a6a2922025bd684c7228a28309d6c4c3.png

    1、递归函数的概念

    递归是一种针对使用简单的循环难以编程实现的问題,提供优雅解决方案的技术。简单来说,递归方法是调用自身的方法。在编程语言中,函数Func(Type a,……)直接或间接调用函数本身,则该函数称为递归函数。递归函数不能定义为内联函数。

    2、实现递归的三要素

    (1)一定有一种可以退出程序的情况;

    (2)总是在尝试将一个问题化简到更小的规模;

    (3)父问题与子问题不能有重叠的部分。

    3、Java递归算法案例

    Java中的递归函数如果没终止条件会造成死循环,所以递归代码里要有结束自调自的条件。接下来通过一个案例来学习如何使用递归算法。

    package QianFeng03;

    //阶乘(递归算法)

    public class FactorialTest {

    public static void main(String[] args){

    int result = factor1( 10);

    System.out.println(result);

    int result1 = factor(10);

    System.out.println("递归算法:内存消耗大容易内存溢出"+result1);

    }

    //---------------递归算法,方法本身调用自己----------------------

    public static int factor(int num){

    if (num==1)

    return 1;

    return num*factor(num-1);

    }

    //---------------普通计算----------------------

    public static int factor1(int num){

    int result = num;

    int i= num-1;

    do{

    result = result*i;

    i--;

    }while (i>1);

    return result;

    }

    }

    4、递归函数与循环的关系:

    (1)联系:

    都是通过控制一个变量的边界(或者多个),来改变多个变量为了得到所需要的值,而反复而执行的;都是按照预先设计好的推断实现某一个值求取;(请注意,在这里循环要更注重过程,而递归偏结果一点)

    (2)区别:

    递归通常是逆向思维居多,“递”和“归”不一定容易发现;而循环从开始条件到结束条件,包括中间循环变量,都需要表达出来。简单的来说就是:用循环能实现的,递归一般可以实现,但是能用递归实现的,循环不一定能。因为有些题目①只注重循环的结束条件和循环过程,而往往这个结束条件不易表达;②只注重循环的次数而不注重循环的开始条件和结束条件。

    关于Java递归函数以及案例详解就讲到这里了,希望对刚刚入门学习Java的初学者能够有一定的帮助。关于更多的Java基础学习的内容,尽在博学谷在线IT培训平台!

    展开全文
  • Java递归调用测试小demo

    千次阅读 2016-12-21 22:40:19
    递归简单点说就是方法调用自己本身。直到满足某一条件退出方法。 下来结合一个小例子来说明其用途... * 递归调用 求阶乘 * 5=5*4*3*2*1=120 * @author Nanfeilong */ public class Diguidiaoyong_jiecheng { p
  • 1、递归的思想递归:指在当前方法内调用自己的这种现象。递归的分类:递归分为两种,直接递归和间接递归。直接递归称为方法自身调用自己。间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法。注意事项:...
  • 上一篇文章《谈递归时,我们在谈论什么》,我们讲解了递归调用的过程是怎么样的。还有这篇文章:《面试官的一次面试经历分享》里谈到了尾递归的问题。我们今天就来讲一下尾递归的事情。在scala编程中,或者说在函数...
  • java递归简单例子练习

    千次阅读 2016-12-12 15:23:34
    //递归简单的小例子 练习: //计算1+2+。。。+1000的和 public class d {    int sum=0;  int i=1;  public void sum(){  sum+=i;  i++;  if(i  sum();//递归就是调用自身  }
  • Java递归调用

    2020-10-03 13:29:44
    java递归调用 递归:简单理解就是方法自己调用自己 递归机构包括两个部分: 递归头:什么时候不调用自身方法,如果没有头,将陷入死循环。 递归体:什么时候需要调用自身方法。 例子; publick static void main ...
  • 第一篇探索栈的数据结构:铭信:递归函数转非递归(通用方法)[1/2]——数据结构​zhuanlan.zhihu.com最终确定函数调用时,开辟的空间如下图所示在 Java 代码中可以使用 Object[] 表示一个栈帧,因为栈中对象的格式有...
  • java实现汉诺例子递归调用

    千次阅读 2014-04-09 23:13:49
    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class HuoNuoTa { /** * * 汉诺塔要求:三个柱子A:3个盘子 B:没有 C:没有, * A借助B将...
  • java递归调用

    千次阅读 热门讨论 2014-09-16 17:40:49
    递归就是自己调用自己,方法与方法...所谓递归调用,就是一个方法自己调用自己。在使用递归调用的时候,应该声明一个操作的终结点。不然的话,你的递归程序会因栈空间不足而终止 。  其实很好理解,下面举个例子
  • 刀枪终入库,老马牧南山,喝...要理解递归其实并不困难,它就是在一个函数的内部调用了本身,执行的情况特别类似是一个循环,如果要这么说递归似乎没有什么好说的,但是在这里我希望和大家讨论的是递归这种算法在使...
  • Java方法的递归调用

    2020-01-26 22:33:25
    Java方法的递归调用 方法的递归调用就是方法自身调用自身。 先看下面的例子: public class Test { //使用 for 循环实现1~n的和 public static int loopSum(int n) { int sum = 0; for (int i = 1; i <= ...
  • 前言:递归(recursion):递归满足2个条件1)有反复执行的过程(调用自身)2)有跳出反复执行过程的条件(递归出口)第一题:汉诺塔对于这个汉诺塔问题,在写递归时,我们只需要确定两个条件:1.递归何时结束?2.递归的核心...
  • // 所谓递归,是指程序调用自身,当然,递归不会无休止地调用下去,它必然有一个出口,当满足条件时程序也就结束了,不然的话,那就是死循环了。// 提供几个递归实例,有的是从网上找的// 1、十进制转换二进制// 2、...
  • java递归调用

    2012-05-23 22:55:07
      递归算法设计的基本思想是:对于一个复杂的问题,把原问题分解为若干个相对简单类同的子问题,继续下去直到子问题简单到能够直接求解,也就是说到了递推的出口,这样原问题就有递推得解。...例子: example: 求5
  • [JAVA]递归调用的顺序

    2019-09-04 09:04:20
    我们以一个简单的例子开始讨论 Example01.java public class Example01{ //使用递归实现 求 1 ~ n 的和 public static int getSum(int n) { if(n == 1) { //满足条件,结束递归 return 1; }...
  • Java递归阶乘小例子

    千次阅读 2014-03-27 17:30:32
    递归 就是一个方法内调用它自身. 要注意的是:递归一定要向已知方向递归. 下面例子是一个关于阶 乘的简单小例子 public class TestDigui { public static void main(String[] args) { // TODO Auto-...
  • java基础之递归调用

    2012-03-26 21:25:34
    递归调用指在方法执行过程中出现该方法本身的调用。   例子: public static int method(int n){ if(n==1){ return 1; }else{ return n*method(n-1); ...
  • 这学期开始了java的学习,在学到递归调用时,有了很大的感触。以下是一个例子以及个人理解。
  • 文章目录6.1 什么是递归?...递归就是方法自己调用自己,每次调用时传入不同的变量。递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。 用大白话来讲述递归, 知乎的一位大佬讲的就非常形象: 一个小朋友坐
  • Java递归终结及小例子

    2018-01-28 20:22:33
    递归不能调用次数过多,否者容易导致栈内存溢出。  2.递归要有出口,否者容易导致栈内溢出。  3。构造方法不能递归。   代码案例: packagecom.zihai.digui; importjava.io.File; importjava.l
  • Java中的递归什么是递归?函数直接或间接调用自身的过程称为递归,相应的函数称为递归函数。使用递归算法,某些问题可以很容易地解决。这类问题的例子有Hanoi的Towers(TOH)、序/前序/后序树遍历、图的DFS等。递归中...
  • Java递归

    2021-01-11 22:41:08
    无论在哪里相信大家都听说过递归,我也是个初学者,一开始我也是看不懂的,后来才慢慢看懂,现在我就来记录一下我所了解的Java递归是什么。 递归:程序调用自身的编程技巧称为递归(recursion),它做为一种算法在...
  • 递归算法要注意的两点:(1) 递归就是在方法里调用自己;(2) 在使用递归算法时,必须要有一个明确的递归结束条件,称为递归出口。先看一个简单的例子,求从1加到5的和,代码如下:package com.juziku;/*** 递归测试* @...
  • 下面是个关于递归调用简单但是很能说明问题的例子:/*递归例子*/#includevoid up_and_down(int);int main(void){up_and_down(1);return 0;}void up_and_down(int n){printf("Level %d:n location %p\n",n,&n); /...
  • java 递归

    2020-05-09 00:05:22
    合理地使用递归能够大大简化我们的程序代码,但是递归调用也是有代价的:函数调用会使用系统栈空间,频繁的函数调用会给系统栈空间带来额外的开销。 下面是递归使用的2个例子 1. 数组求和 public class Sum { ...
  • 一、含义递归算法是一种直接或间接地调用自身的算法。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。二、例子99乘法表的例子1、普通实现99乘法表太简单,是个...

空空如也

空空如也

1 2 3 4 5 ... 18
收藏数 355
精华内容 142
关键字:

java递归调用例子

java 订阅