Java递归算法

这篇具有很好参考价值的文章主要介绍了Java递归算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

程序调用自身的编程技巧称为递归(recursion),它做为一种算法在程序设计语言中广泛应用。Java支持递归,在 Java 编程中,递归是允许方法调用自身调用的属性。调用自身的方法称为是递归的。

一个物理世界的实例是放置两个彼此面对的平行反射镜。它们之间的任何对象都将被递归地反射。

递归如何工作?

Java递归算法,面向对象,java,算法,开发语言

Java递归的工作流程图

在上面的示例中,我们从main方法内部调用了recurse()方法。  

在recurse()方法内部,我们再次调用相同的recurse方法。 这是一个递归调用。

为了停止递归调用,我们需要在方法内部提供一些条件。否则,该方法将被无限调用。

因此,我们使用if...else..或类似方法)终止方法内部的递归调用。

示例:使用递归的阶乘

class Factorial {

    static int factorial( int n ) {
        if (n != 0)  // 终止条件
            return n * factorial(n-1); //递归调用
        else
            return 1;
    }

    public static void main(String[] args) {
        int number = 4, result;
        result = factorial(number);
        System.out.println(number + " 的阶乘= " + result);
    }
}

输出

4 的阶乘= 24

在上面的示例中,我们有一个名为factorial()的方法。 从main()方法调用factorial()。 用传递的数字变量作为参数。

在这里,请注意以下语句:

return n * factorial(n-1);

factorial()方法正在调用自身。 最初,n的值在factorial()内部为4。 在下一个递归调用期间,将3传递给factorial()方法。 此过程一直持续到n等于0。

当n等于0时,if语句返回false,因此返回1。最后,将累积的结果传递给main()方法。

阶乘程序的工作流程

下图将使您更好地了解如何使用递归执行阶乘程序。

Java递归算法,面向对象,java,算法,开发语言

使用递归的阶乘程序

递归的优缺点

进行递归调用时,将在堆栈上分配新的变量存储位置。随着每个递归调用的返回,旧的变量和参数将从堆栈中删除。因此,递归通常使用更多的内存,并且通常很慢。

另一方面,递归解决方案要简单得多,并且花费更少的时间来编写,调试和维护。

java中方法如何递归调用

方法递归是指在方法中调用自身的过程。

在Java中,可以通过以下步骤实现方法递归调用:

  • 定义一个方法,并确保该方法可以接受参数。
  • 在方法内部使用条件语句(if/else)或循环语句(while/for)来控制方法是否继续递归调用自身。
  • 在条件语句或循环语句内部,调用该方法并传入新的参数。这样,方法就会重新执行,并且可能再次递归调用自身。
  • 当条件不再满足时,递归过程就会停止,并将结果返回给调用者。

以下是一个简单的例子,展示了如何使用递归来计算阶乘:

public class RecursionExample {
    public static int factorial(int n) {
        if (n == 1) //递归终止条件
            return 1;
        else
            return n * factorial(n-1); //递归调用
    }

    public static void main(String[] args) {
        int num = 5;
        int result = factorial(num);
        System.out.println("Factorial of " + num + " is " + result);
    }
}

在上面的示例中,factorial方法使用递归计算给定数字的阶乘。当n等于1时,递归终止。否则,它会调用自身并将n-1作为参数传递。在每个递归调用中,n的值都会减少,直到递归终止。最终,将计算出阶乘的值,并将其返回给调用者。

案例:使用递归调用打印十进制整数对应的二进制码

以下是JAVA代码实现:

public class DecimalToBinary {
   public static void main(String[] args) {
      int decimal = 15;
      System.out.print("二进制数为:");
      decimalToBinary(decimal);
   }

   public static void decimalToBinary(int decimal) {
      if (decimal > 0) {
         decimalToBinary(decimal / 2);
         System.out.print(decimal % 2);
      }
   }
}

输出结果为:

二进制数为:1111

说明:文章来源地址https://www.toymoban.com/news/detail-612183.html

  • 该代码分为两部分:主函数和递归函数。
  • 主函数中定义了一个十进制整数变量 decimal,并调用了递归函数 decimalToBinary(),并将 decimal 作为参数传递给该函数。
  • 递归函数 decimalToBinary() 实现了将十进制整数转换成二进制数的功能。
  • 递归函数中如果传入的十进制整数大于 0,则递归调用自身并将传入参数除以 2,以实现对二进制数的分解。
  • 最后在每次递归调用结束时,输出 传入参数对 2 取余数的结果,以实现对二进制数的生成。

到了这里,关于Java递归算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 🔥🔥Java开发者的Python快速进修指南:面向对象基础

    当我深入学习了面向对象编程之后,我首先感受到的是代码编写的自由度大幅提升。不同于Java中严格的结构和约束,Python在面向对象的实现中展现出更加灵活和自由的特性。它使用了一些独特的,如self和cls,这些不仅增强了代码的可读性,还提供了对类和实例的明确

    2024年02月05日
    浏览(68)
  • 🔥🔥Java开发者的Python快速进修指南:面向对象--高级篇

    首先,让我来介绍一下今天的主题。今天我们将讨论封装、反射以及单例模式。除此之外,我们不再深入其他内容。关于封装功能,Python与Java大致相同,但写法略有不同,因为Python没有修饰符。而对于反射来说,我认为它比Java简单得多,不需要频繁地获取方法和属性,而是

    2024年02月05日
    浏览(66)
  • Java开发者的Python快速进修指南:面向对象--高级篇

    首先,让我来介绍一下今天的主题。今天我们将讨论封装、反射以及单例模式。除此之外,我们不再深入其他内容。关于封装功能,Python与Java大致相同,但写法略有不同,因为Python没有修饰符。而对于反射来说,我认为它比Java简单得多,不需要频繁地获取方法和属性,而是

    2024年02月05日
    浏览(68)
  • c、c++、java、python、js对比【面向对象、过程;解释、编译语言;封装、继承、多态】

    目录 内存管理、适用 区别 C 手动内存管理:C语言没有内置的安全检查机制,容易出现内存泄漏、缓冲区溢出等安全问题。 适用于系统级编程 C++ 手动内存管理:C++需要程序员手动管理内存,包括分配和释放内存,这可能导致内存泄漏和指针错误。 适用于游戏引擎和系统级编

    2024年02月08日
    浏览(76)
  • Java——Java面向对象

    该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架。 Java是面向对象的程序设计语言,Java语言提供了定义类、成员变量、方法等最基本的功能。

    2024年02月02日
    浏览(43)
  • 【JAVA杂货铺】一文带你走进面向对象编程的构造方法 | Java| 面向对象编程 | (中)

    🌈个人主页:  Aileen_0v0 🔥系列专栏: Java学习系列专栏 💫个人格言: \\\"没有罗马,那就自己创造罗马~\\\"   目录 回顾  构造方法  this 面试题 构造方法的类型  下节预告 代码块  之前我们学习了什么是类  什么是对象  什么是面向对象编程 定义类   构造方法 :它的方法名

    2024年02月05日
    浏览(55)
  • 【Java面试题】Java基础——面向对象

    重载和重写的区别★★★ 重载(Overloading)和重写(Overriding)都是Java中面向对象编程的特性,它们都可以让子类继承父类的方法。但是它们之间有一些重要的区别: 定义方式: 重载(Overloading): 在同一个类中 ,可以有 多个方法名相同但参数列表不同的方法 。当调用一个方法时,

    2024年02月11日
    浏览(38)
  • Java面向对象01——类与对象

    大家好,我是白夜,今天和大家聊聊类与对象 面向过程编程 C 语言就是面向过程编程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 面向对象编程 JAVA 是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。 举

    2024年04月08日
    浏览(46)
  • 【Java高级语法】(十)面向对象:掀开Java 的面向对象盖章时代,一起来发现OOP的有趣编程秘密!~

    面向对象编程(Object-Oriented Programming, OOP)是一种广泛应用于软件开发的编程范式 。Java是一种面向对象的编程语言,它提供了丰富的工具和特性来支持面向对象编程。本文将详细介绍Java面向对象的全部知识。 我们可以把一个Java类想象成是一个蓝图或者模具,用来创建对象。就

    2024年02月11日
    浏览(51)
  • Java面向对象中“匿名对象”的使用

    匿名对象 顾名思义,匿名对象指的就是没有名字的对象,在使用中理解为实例化一个类对象,但是并不把它赋给一个对应的类变量,而是直接使用。在理解匿名对象前,我们先创建一个类便于后面的使用。 匿名对象具有以下特征: 语法上:只创建对象,但不用变量来接收,

    2024年02月05日
    浏览(80)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包