【JavaSE】方法递归调用基本使用

简介: 【JavaSE】方法递归调用基本使用

1. 基本介绍

简单的说: 递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂问题,同时可以让代码变得简洁

2. 递归能解决什么问题?

在这里插入图片描述
在这里插入图片描述

3. 递归举例

列举两个小案例,来帮助大家理解递归调用机制
1) 打印问题

package com.xdr630.chapter07;

public class Recursion01 {
    public static void main(String[] args) {
        T t1 = new T();
        t1.test(4);
    }
}

class T{
    public void test(int n){
        if (n > 2){
            test(n - 1);
        }
        System.out.println("n=" + n);
    }
}

在这里插入图片描述

  • 把上面的class T加个 else
class T{
    public void test(int n){
        if (n > 2){
            test(n - 1);
        }else{
            System.out.println("n=" + n);
        }

    }

在这里插入图片描述

  • 当n=3时,下面的栈进入到 if 后才会开个栈,就不会进入到 else 里了,所以 3,4就不会被输出了

在这里插入图片描述

2) 阶乘问题

public class Recursion01 {
    public static void main(String[] args) {
        T t1 = new T();
        int res = t1.factorial(5);
        System.out.println("5的阶乘 res" + res);
    }
}

class T{

        public int factorial(int n){
            if (n == 1){
                return 1;
            }else{
                return factorial(n - 1) * n;
            }
        }
    }

在这里插入图片描述

  • 谁调用就返回给哪个,最后return 1返回给factorial(1)factorial(1)x2=2返回给 factorial(2),一层一层返回调用

在这里插入图片描述

4. 递归重要规则

在这里插入图片描述

5. 递归调用——练习

  1. 请使用递归的方式求出斐波那契数1,1,2.3.5,8,13..给你一个整数n,求出它的值是多少

思路分析

    1. 当n = 1 斐波那契数 是1
    2. 当n = 2 斐波那契数 是1
    3. 当n >= 3  斐波那契数 是前两个数的和
    4. 这里就是一个递归的思路
package com.xdr630.chapter07;

public class RecursionExercise01 {
    public static void main(String[] args) {
        T1 t1 = new T1();
        int n = 7;
        int res = t1.fibonacci(n);
        if(res != -1) {
            System.out.println("当n="+ n +" 对应的斐波那契数=" + res);
        }
    }
}

class T1{
    public int fibonacci(int n) {
        if( n >= 1) {
            if( n == 1 || n == 2) {
                return 1;
            } else {
                return fibonacci(n-1) + fibonacci(n-2);
            }
        } else {
            System.out.println("要求输入的n>=1的整数");
            return -1;
        }
    }
}

在这里插入图片描述

  • n=-1

在这里插入图片描述

  1. 猴子吃桃子问题:有一堆桃子,猴子第一天吃了其中的一半,并再多吃了一个。以后每天猴子都吃其中的一半,然后再多吃一个。当到第10天时,想再吃时(即还没吃),发现只有1个桃子了。

问题:最初共多少个桃子?

思路分析 逆推

    1. day = 10 时 有 1个桃子
    2. day = 9 时  有 (day10 + 1) * 2 = 4
    3. day = 8 时  有 (day9 + 1) * 2 = 10
    4. 规律就是  前一天的桃子 = (后一天的桃子 + 1) *2
    5. 递归
public class RecursionExercise01 { 

    //编写一个main方法
    public static void main(String[] args) {

        T t1 = new T();
        //桃子问题
        int day = 10;
        int peachNum = t1.peach(day);
        if(peachNum != -1) {
            System.out.println("第 " + day + "天有" + peachNum + "个桃子");
        }


    }
}
    public int peach(int day) { 
        if(day == 10) {//第10天,只有1个桃
            return 1; 
        } else if ( day >= 1 && day <=9 ) {
            return (peach(day + 1) + 1) * 2;
        } else {
            System.out.println("day在1-10");
            return -1;
        }
    }
  • 更改天数查看桃子数量的变化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 当 day = -1 时:

在这里插入图片描述

目录
相关文章
|
1天前
|
Java 编译器
【Java开发指南 | 第十九篇】Java方法
【Java开发指南 | 第十九篇】Java方法
9 0
|
1天前
|
Java
判断不为空和不为空串的方法java
判断不为空和不为空串的方法java
|
1天前
|
Java
【专栏】Java反射机制,该机制允许程序在运行时获取类信息、动态创建对象、调用方法和访问属性
【4月更文挑战第27天】本文探讨了Java反射机制,该机制允许程序在运行时获取类信息、动态创建对象、调用方法和访问属性。反射通过Class、Constructor、Method和Field类实现。文中列举了反射的应用场景,如动态创建对象、调用方法、访问属性和处理注解,并提供了相关实例代码演示。
|
1天前
|
Java 编译器
【Java开发指南 | 第十七篇】Java 方法
【Java开发指南 | 第十七篇】Java 方法
8 1
|
1天前
|
Java
【Java开发指南 | 第九篇】访问实例变量和方法、继承、接口
【Java开发指南 | 第九篇】访问实例变量和方法、继承、接口
12 4
|
1天前
|
XML JavaScript Java
详解Java解析XML的四种方法
详解Java解析XML的四种方法
15 1
|
1天前
|
存储 Java API
掌握8条方法设计规则,设计优雅健壮的Java方法
掌握8条方法设计规则,设计优雅健壮的Java方法
|
1天前
|
Java C语言
详解java方法与递归
详解java方法与递归
11 3
|
1天前
|
SQL Java 数据库连接
JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
10 0
|
1天前
|
Java
Java一分钟之-方法定义与调用基础
【5月更文挑战第8天】本文介绍了Java编程中的方法定义和调用,包括基本结构、常见问题和避免策略。方法定义涉及返回类型、参数列表和方法体,易错点有返回类型不匹配、参数错误和忘记返回值。在方法调用时,要注意参数传递、静态与非静态方法的区分,以及重载方法的调用。避免错误的策略包括明确返回类型、参数校验、理解值传递、区分静态和非静态方法以及合理利用重载。通过学习和实践,可以提升编写清晰、可维护代码的能力。
14 0