返回顶部
首页 > 资讯 > 后端开发 > Python >Java递归和迭代区别详细介绍
  • 269
分享到

Java递归和迭代区别详细介绍

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

摘要

目录1.递归和迭代的区别2.代码1.递归和迭代的区别 当实体调用自身时,程序称为递归。当存在循环(或重复)时,程序称为迭代调用。示例:求一个数的阶乘的程序  时间复杂度比较

1.递归和迭代的区别

  • 当实体调用自身时,程序称为递归
  • 当存在循环(或重复)时,程序称为迭代调用
  • 示例:求一个数的阶乘的程序

 时间复杂度比较

  • 查找递归的时间复杂度比迭代更难。
  • 递归:递归的时间复杂度可以通过根据先前的调用找到第 n 次递归调用的值来找到。因此,根据基本情况找到目标情况,并根据基本情况求解,可以让我们了解递归方程的时间复杂度。
  • 迭代:迭代的时间复杂度可以通过找到循环内重复的循环数来找到。

 用法比较

  •  使用这些技术中的任何一种都是时间复杂度和代码大小之间的权衡。
  • 如果时间复杂度是重点,递归调用的次数会很大,那么最好使用迭代。
  • 但是,如果时间复杂度不是问题而代码的短小是问题,那么递归将是可行的方法。
  • 递归:递归涉及再次调用相同的函数,因此代码长度非常短。然而,正如我们在分析中看到的那样,当递归调用数量相当多时,递归的时间复杂度可能会呈指数级增长。因此,递归的使用在更短的代码中是有利的,但时间复杂度更高。
  • 迭代:迭代是代码块的重复。这涉及较大的代码量,但时间复杂度通常低于递归。

 开销

  • 与迭代相比,递归有大量的开销。
  • 递归:递归有函数重复调用的开销,即由于重复调用同一个函数代码的时间复杂度增加了很多倍
  • 迭代:迭代不涉及任何此类开销。

 无限重复

  •  递归中的 Infinite Repetition 会导致 CPU crash,但在迭代中,当内存耗尽时它会停止。
  • 递归:在Recursion中,由于指定的基本条件错误,可能会出现无限递归调用,在永远不会为假的情况下,不断调用函数,这可能会导致系统CPU崩溃。
  • 迭代:由于迭代器赋值或递增错误或终止条件错误而导致的无限迭代将导致无限循环,这可能会或可能不会导致系统错误,但肯定会停止程序的进一步执行。
递归迭代
定义函数调用自身。重复执行的一组指令。
应用对于功能。对于循环。
终止通过 base case,这里不会有函数调用。当不再满足迭代器的终止条件时。
用法当代码大小需要很小并且时间复杂度不是问题时使用。当时间复杂度需要与扩展的代码大小进行平衡时使用
代码大小更少的代码更多的代码
时间复杂度非常高(通常是指数)的时间复杂度。时间复杂度相对较低(一般为多项式-对数)。
空间复杂度空间复杂度高于迭代。空间复杂度较低。
这里的栈是用来存放函数调用时的局部变量的。不使用堆栈。
速度执行速度很慢,因为它有维护和更新堆栈的开销。通常,它比递归更快,因为它不使用堆栈。
存储与迭代相比,递归使用更多内存。没有开销,因为迭代中没有函数调用。
高架拥有重复函数调用的开销。没有开销,因为迭代中没有函数调用。
无限重复如果递归函数不满足终止条件或未定义或从未达到基本情况,则会导致堆栈溢出错误,并且系统有可能在无限递归中崩溃。如果迭代语句的控制条件永远不为假或控制变量没有达到终止值,就会造成死循环。在无限循环中,它一次又一次地使用 CPU 周期。

2.代码

public class Test {
    // ----- 递归 -----
    // 求给定数的阶乘的方法
    static int factorialUsingRecursion(int n)
    {
        if (n == 0)
            return 1;

        // 递归呼叫
        return n * factorialUsingRecursion(n - 1);
    }

    // -----迭代 -----
    //求给定数的阶乘的方法
    static int factorialUsingiteration(int n)
    {
        int res = 1, i;

        // 迭代
        for (i = 2; i <= n; i++)
            res *= i;

        return res;
    }

    public static void main(String[] args)
    {
        int num = 5;
        System.out.println("Factorial of " + num
                + " using Recursion is: "
                + factorialUsingRecursion(5));

        System.out.println("Factorial of " + num
                + " using Iteration is: "
                + factorialUsingIteration(5));
    }
}
Factorial of 5 using Recursion is: 120
Factorial of 5 using Iteration is: 120

到此这篇关于Java递归和迭代区别详细介绍的文章就介绍到这了,更多相关Java递归和迭代区别内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java递归和迭代区别详细介绍

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

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

猜你喜欢
  • Java递归和迭代区别详细介绍
    目录1.递归和迭代的区别2.代码1.递归和迭代的区别 当实体调用自身时,程序称为递归。当存在循环(或重复)时,程序称为迭代调用。示例:求一个数的阶乘的程序  时间复杂度比较...
    99+
    2023-05-15
    Java 递归和迭代区别介绍 Java递归和迭代的区别 递归和迭代的区别
  • Java递归和迭代区别是什么
    今天小编给大家分享一下Java递归和迭代区别是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.递归和迭代的区别当实体调...
    99+
    2023-07-06
  • php中递归和迭代的区别是什么
    这篇文章将为大家详细讲解有关php中递归和迭代的区别是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。php中递归和迭代的区别是,递归是指程序调用自身,而迭代是指利用变量的原值推算出变量的...
    99+
    2023-06-20
  • 域名解析递归和迭代有什么区别
    域名解析中递归与迭代的区别有以下两点递归是用户只向本地DNS服务器发出请求,然后等待肯定或否定答案;而迭代是本地服务器向DNS服务器发出请求,DNS服务器在给出下一级DNS服务器的地址,直至得到最终答案。递归中DNS服务器接收到客户机请求,...
    99+
    2024-04-02
  • JavaScript可迭代对象详细介绍
    目录1、迭代器2、迭代器接口与可迭代对象3、自定义可迭代对象3.1、可迭代的Range对象3.2、使用Generator函数作为迭代器接口3.3、可迭代的List3.3、可迭代的迭代...
    99+
    2024-04-02
  • 详细介绍一下HTTP和PHP的区别
    随着互联网的快速发展,人们对于计算机的使用以及互联网技术的应用越来越广泛。而在互联网技术的应用中,两个技术经常被提到,就是HTTP和PHP。它们分别代表了网络传输和网站开发领域中非常重要的两部分。那么,HTTP和PHP之间到底存在着哪些区别...
    99+
    2023-05-14
  • Java中方法的使用、重载与递归的详细介绍
    目录一.方法的基本使用1.什么是方法2.方法基本语法二.方法的重载1.重载的作用2.重载的使用规则三.方法的递归1.递归的概念2.递归执行过程分析3.递归练习1.按顺序打印一个数字的...
    99+
    2024-04-02
  • Java中的参数传递详细介绍
    目录前言1.值传递2.引用传递3.String类型传递4.举例总结前言 Java中的参数传递:分为值传递和引用传递但本质上,Java中只有值传递。引用传递,其实可以理解为传的是类似指...
    99+
    2024-04-02
  • 详细介绍PHP函数和方法的区别
    随着互联网技术的发展,PHP已经成为了非常流行的开发语言之一。身为一个PHP开发者,了解PHP函数和方法的区别是非常重要的,因为它们在编写代码的时候都是必不可少的。在本文中,我们将详细介绍PHP函数和方法的区别。PHP函数是一段可重复使用的...
    99+
    2023-05-14
    php php函数
  • mysql中int、bigint、smallint 和 tinyint的区别详细介绍
    在MySQL中,int、bigint、smallint和tinyint都是整数数据类型,它们之间的区别主要体现在取值范围和存储空间上...
    99+
    2023-08-14
    mysql
  • 详解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
  • Win8.1 32位和64位有什么区别 Win8.1 32位和64区别详细介绍
      有关Win8.1系统32位和64位的区别,其实就是32位系统和64位系统的区别,概括的说,主要有以下及大区别。   ★设计初衷不同   64位操作系统的设计初衷是为了满足机械设计和分析、三维动画、视...
    99+
    2022-06-04
    详细介绍 有什么区别 区别
  • Java中&和&&的区别简单介绍
    & 按位运算符,逻辑运算符 && 逻辑运算符 相同点:只要有一端为假,则语句不成立 假设有三个参数 int x = 1; int y = 2; int q =...
    99+
    2024-04-02
  • java中循环和递归的区别有哪些
    这篇文章主要介绍java中循环和递归的区别有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、说明一般递归调用可以处理的算法,也通过循环去解决常需要额外的低效处理 。 现在的编译器在优化后,对于多次调用的方法处理...
    99+
    2023-06-15
  • win7旗舰版和专业版的区别的详细介绍
    win7旗舰版和专业版的区别是什么呢?很多人不知道win7旗舰版是什么意思,和专业版有什么不同,在安装win7时也不知道应该选择哪个系统。快来了解一下win7旗舰版和专业版之间的区别,小编为大家进行科普!1、首先我们看一下win7专业版的特...
    99+
    2023-07-19
  • 详细介绍Java关键字throw throws Throwable的用法与区别
    目录1. Throwable1.1 扩展-Error1.2 扩展-Exception2. throws2.1 扩展3. throw3.1 扩展4. 总结throw,意为“...
    99+
    2024-04-02
  • Java String类和StringBuffer类的区别介绍
     关于java的字符串处理我们一般使用String类和StringBuffer类 那么String类和StringBuffer类的区别在什么地方呢 1、String是不可变...
    99+
    2024-04-02
  • win7专业版和旗舰版有什么区别的详细介绍
    Windows 7是微软发布的一款操作系统,分为多个版本,其中包括Windows 7专业版和旗舰版。下面是它们之间的详细区别介绍:1...
    99+
    2023-08-31
    win7
  • Java详细解析==和equals的区别
    目录1、== 解析2、equals 方法解析3、equals方法具有以下特性1、== 解析 == 常用于相同的基本数据类型之间的比较,也可用于相同类型的对象之间的比较; 如...
    99+
    2024-04-02
  • windows10专业版和家庭版有哪些区别windows10专业版和家庭版区别详细介绍
    windows10专业版和家庭版有哪些区别是很多用户第一次应用win10的那时候的疑惑,由于版本的关联许多用户不清楚该挑选那一个版本,家庭版和专业版是许多用户在担心的版本,这两个版本的用户量都非常大,而且全是一般的用户,那麼为了更好地协助清...
    99+
    2023-07-10
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作