返回顶部
首页 > 资讯 > 后端开发 > Python >Java 精炼解读递归的概念与使用
  • 456
分享到

Java 精炼解读递归的概念与使用

2024-04-02 19:04:59 456人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录一、递归的概念1.什么是递归?2.递归讲解二、递归的使用 总结:一、递归的概念 1.什么是递归? 递归就是:方法自己调用方法的过程。 使用递归有两个前提条件: 1.有一

一、递归的概念

1.什么是递归?

递归就是:方法自己调用方法的过程。

使用递归有两个前提条件:

1.有一个趋近与终止的条件。

2.自己调用自己 。

如何实现递归?

最重要的方式是:实现递归,需要去推导出一个递推公式。

思考递归的方式:横向思考,根据递推公式来思考。

代码的执行:是纵向执行。

2.递归讲解

首先看下面代码:


public class TestDemo {
    public static void func(){
        
        func();   //自己调用自己本身
    }
 
 
    public static void main(String[] args) {
        func();
 
    }
}

上图代码就是一个简单的递归。

我们再来看一下这个代码的运行结果,

画图讲解:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

 对于上图这个递归来说,根本没有一个趋于终止的条件,所以这个函数会无休止的递归下去。每次递归都要在栈上开辟内存,一直在栈上开辟内存,总有一次会栈超出。

老铁们要记住:一旦你写的递归有问题,如果是边界没找对一定会报一个

7ae60fddda4c4c9183eef750dc310410.jpg

,如果报了这个错误那么一定是你的终止条件有错误,或者是没写终止条件导致了你在递归的过程当中深度过大,最终栈溢出。

如果想要让上述代码正确,我们需要给它加入一个终止条件。

正确代码如下:


public class TestDemo {
    public static void func(int n){
        if(n == 1) return;
        func(n -1);
    }
 
 
    public static void main(String[] args) {
        func(3);
 
    }
}

下面会通过简单的例题让大家更加深入的了解递归

二、递归的使用 

例题:递归方式求n的阶乘 画图分析:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

实现代码 :


public class TestDemo {
    public static int fac(int n){
        if(n == 1) {
            return 1;
        }
        int tmp = n * fac(n - 1);
        return tmp;
    }
    public static void main(String[] args) {
        System.out.println(fac(5));
 
    }
}

代码画图讲解:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

例题:求n的和

画图分析:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

 实现代码:


第一种写法:
public class TestDemo {
    public static int sumAdd(int n){
        if(n == 1) {
            return 1;
        }
        int tmp = n + sumAdd(n - 1);
        return tmp;
    }
    public static void main(String[] args) {
        System.out.println(sumAdd(3));
 
    }
}
 
第二种写法:
public class TestDemo {
    public static int sumAdd(int n){
        if(n == 1) {
            return 1;
        }
       
        return n + sumAdd(n -1);
    }
    public static void main(String[] args) {
        System.out.println(sumAdd(3));
 
    }
}

例题:递归实现按照顺序打印每一位的数字 

画图分析:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

 实现代码:


public class TestDemo {
 
    public static void print(int n){
        if(n < 10){
            System.out.print(n+" ");
        }else{
            print(n/10);
            System.out.print(n%10+" ");
        }
    }
    public static void main(String[] args) {
        print(1234);
 
 
    }
}

例题:写一个递归方法,输入一个非负整数,返回组成它的数字之和。例如:输入1729,则应该返回1+7+2+9

实现代码:


public class TestDemo {
 
 
    public static int sumEveryone(int n){
        if(n < 10){
           return n;
        }else{
            return n%10 + sumEveryone(n/10);
        }
    }
 
    public static void main(String[] args) {
        System.out.println(sumEveryone(7910));
 
    }
 
}

例题:求第n个斐波那契数是几 

画图分析:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

实现代码:


第一种方法:递归
public class TestDemo {
    public static int fib(int n){
        if(n == 1 || n == 2){
            return 1;
        }else{
            return fib(n-2)+fib(n-1);
        }
    }
    public static void main(String[] args) {
        System.out.println(fib(5));
 
    }
 
 
 
第二种方法:叫做循环(迭代)实现
    public static int fib2(int n){
        if(n == 1 || n==2){
            return 1;
        }
            int f1 = 1;
            int f2 = 1;
            int f3 = 0;
            for (int i = 3; i < n; i++) {
                f3 = f1+f2;
                f1 = f2;
                f2 = f3;
            }
            return f3;
 
    }
    public static void main(String[] args) {
        System.out.println(fib2(45));
 
    }

总结:

本文简单介绍了什么是递归、递归讲解、递归如何使用。通过简单例题的方式加深对递归的印象。上述就是今天的内容,文章哪里出现了问题我都会积极改正,也希望大家能更快的掌握自己想要的知识,让我们一起加油!!!!!

到此这篇关于Java 精炼解读递归的概念与使用的文章就介绍到这了,更多相关Java 递归内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java 精炼解读递归的概念与使用

本文链接: https://lsjlt.com/news/142568.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java 精炼解读递归的概念与使用
    目录一、递归的概念1.什么是递归?2.递归讲解二、递归的使用 总结:一、递归的概念 1.什么是递归? 递归就是:方法自己调用方法的过程。 使用递归有两个前提条件: 1.有一...
    99+
    2024-04-02
  • Java 精炼解读数据结构的链表的概念与实现
    目录前言:一、什么是链表链表的概念链表的结构链表如何存储数据链表的实现  穷举法创建链表打印链表查找是否包含关键字key是否在单链表当中 得到单链表的长度:头插法尾插法任意位置插入,...
    99+
    2024-04-02
  • Java递归的概念是什么与如何使用
    这篇文章主要介绍“Java递归的概念是什么与如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java递归的概念是什么与如何使用”文章能帮助大家解决问题。一、递归的概念1.什么是递归?递归就是:...
    99+
    2023-06-29
  • Java精炼解读方法的定义与使用
    目录一、方法的基本用法1.1 什么是方法(method)1.2 方法定义语法 1.3方法的开辟 二、方法的重载 三、方法的使用 一、方法的基本用法 1.1 什么是方法(method)...
    99+
    2024-04-02
  • Java 关于递归的调用机制精细解读
    目录1. 基本介绍:2. 递归能解决什么问题?3. 递归举例分析:3.1 打印问题:3.2 阶乘问题:递归的重要规则:方法的递归调用 1. 基本介绍: 简单地说,递归就是方法自己调用...
    99+
    2024-04-02
  • 详解Java中二叉树的基础概念(递归&迭代)
    目录1.树型结构1.1概念1.2概念(重要)2.二叉树(重点)2.1概念2.2二叉树的基本形态2.3两种特殊的二叉树2.4二叉树的性质2.5二叉树的存储2.6二叉树的基本操作2.7二...
    99+
    2024-04-02
  • 掌握Python递归函数的关键概念与技巧
    理解Python递归函数的关键概念与技巧,需要具体代码示例 Python是一种简单易学的编程语言,它提供了许多强大的工具和功能,其中递归函数是一个非常重要的概念。在本文中,我们将探讨理解Python递归函数的关键概念和技巧,并通...
    99+
    2024-02-03
    技巧 递归函数 关键概念
  • 掌握 C++ 递归的奥秘:概念与实例分析
    答案: c++++ 递归是一种函数调用自身的强大技巧。详细描述:递归函数将问题分解为更小的子问题。函数递归地调用自身来解决子问题,直至子问题足够小。常见的递归实战案例包括:阶乘计算、斐波...
    99+
    2024-05-01
    c++ 递归
  • Java 精炼解读时间复杂度与空间复杂度
    目录前言:一、算法效率二、时间复杂度1.时间复杂度概念2.大O的渐进表示法计算时间复杂度  三、空间复杂度 总结:前言: 所谓的复杂度就是衡量算法的效率,衡量算发...
    99+
    2024-04-02
  • Java方法与递归怎么使用
    今天小编给大家分享一下Java方法与递归怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。java中方法的使用什么是方法...
    99+
    2023-06-30
  • 拆解 MySQL 的高阶使用与概念
    前面我们主要分享了MySQL中的常见知识与使用。这里我们主要分享一下MySQL中的高阶使用,主要包括:函数、存储过程和存储引擎。 对于MySQL中的基础知识,可以参见 《与 MySQL 的零距离接触...
    99+
    2022-05-19
    MySQL MySQL
  • Java中的什么场景使用递归,如何使用递归
    目录什么是递归?递归有什么优点?迭代和递归的区别递归的三个条件什么场景下适合使用递归场景一场景二总结Java 递归算法一、概述二、应用场景三、示例四、实际示例五、递归的缺点什么是递归...
    99+
    2024-04-02
  • 全面分析Java方法的使用与递归
    目录java中方法的使用什么是方法方法的定义与使用方法如何进行调用及其方法调用过程方法的形参和实参方法重载方法签名递归java中方法的使用 什么是方法 举一个日常生活中的例子,比如我...
    99+
    2024-04-02
  • 解读费布纳契数列:非递归与记忆递归的计时比较
    一分耕耘,一分收获!既然打开了这篇文章《解读费布纳契数列:非递归与记忆递归的计时比较》,就坚持看下去吧!文中内容包含等等知识点...希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也...
    99+
    2024-04-05
  • Java中ArrayList与顺序表的概念与使用实例
    目录前言泛型(Generic)泛型的引入泛型的基本概念包装类(Wrapper Class)包装类的引入基本数据类型与包装类的对应关系ArrayList与顺序表ArrayList简介A...
    99+
    2024-04-02
  • 详解C#中委托的概念与使用
    目录委托的概念多播委托拖动按钮委托的概念 委托这个名字取的神乎其神的,但实质是函数式编程,把函数作为参数传递给另一个参数。对于C语言程序员来说,就是把函数指针当作参数传递给另一个函数...
    99+
    2023-02-27
    C#委托使用 C#委托
  • Java反射概念与使用实例代码
    目录前言反射基础数据准备基于反射创建对象获取反射中的对象获取类中属性获取类中的构造方法获取类中方法结语前言 大家好,瑞雪后的第一天,每个周一的大家都期待这周五的来临。相信很多小伙伴...
    99+
    2024-04-02
  • Java锁擦除与锁粗化概念和使用详解
    目录一、什么是锁擦除二、锁擦除的演示三、什么是锁粗化四、锁粗化的演示一、什么是锁擦除 锁擦除是指虚拟机即时编译器(JIT)在运行时,对一些代码上要求同步,但是被检测到不可能存在共享数...
    99+
    2023-02-13
    Java锁擦除与锁粗化 Java锁粗化 Java锁擦除
  • Java 精炼解读数据结构的顺序表如何操作
    目录前言一、什么是顺序表顺序表的概念及结构创建顺序表打印顺序表获取顺序表长度在pos位置新增元素判定是否包含某个元素查找某个元素对应的位置获取 pos 位置的元素给 pos 位置的元...
    99+
    2024-04-02
  • java中IO的概念及使用
    本篇内容主要讲解“java中IO的概念及使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java中IO的概念及使用”吧!目录一.认识IOIO的分类IO的方式IO读写的方式IO的特性二.文件操作...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作