计算n的阶乘-递归与迭代之间的相爱相杀

news2024/11/25 21:24:00

n的阶乘是指从1连乘到n的结果,通常用符号n!表示。例如,3的阶乘表示为3!,计算过程如下:

3! = 3 × 2 × 1 = 6

一般地,n的阶乘可以用递归或迭代的方式计算,公式为:

n! = n × (n-1) × (n-2) × ... × 2 × 1

阶乘在数学和计算机科学中都有广泛的应用,例如在组合数学、排列组合、概率统计等领域。

那么勇java代码来实现,有哪些方式呢

第一种:迭代,这种是最直观最容易理解的:

    private long factorial(int n) {
        long factorial = 1;
        while (n > 1) {
            factorial = factorial * n;
            n--;
        }
        return factorial;
    }

    @Test
    public void factorial() {
        System.err.println(factorial(1));
        System.err.println(factorial(2));
        System.err.println(factorial(3));
        System.err.println(factorial(4));
        System.err.println(factorial(5));
    }

第二种:递归,只要n不等于1,一直调用自身:

    private long recursionFactorial(int n) {
        if (n == 1) {
            return n;
        } else {
            return n * recursionFactorial(n - 1);
        }
    }

    @Test
    public void recursionFactorial() {
        System.err.println(recursionFactorial(1));
        System.err.println(recursionFactorial(2));
        System.err.println(recursionFactorial(3));
        System.err.println(recursionFactorial(4));
        System.err.println(recursionFactorial(5));
    }

第三种:使用栈或者队列来实现,递归的本质是在jvm层面的方法栈上创建栈帧来缓存中间结果,那么我们可以换一种思路,只要能把中间结果缓存起来,就可以不用递归了,其本质其实还是迭代:

 private long stackFactorial(long n) {
        Stack<Long> stack = new Stack<>();
        stack.push(n);
        long result = 1;
        while (!stack.isEmpty()) {
            Long pop = stack.pop();
            result = result * pop;
            if (pop > 1) {
                pop--;
                stack.push(pop);
            }
        }
        return result;
    }

    @Test
    public void stackFactorial() {
        System.err.println(stackFactorial(1));
        System.err.println(stackFactorial(2));
        System.err.println(stackFactorial(3));
        System.err.println(stackFactorial(4));
        System.err.println(stackFactorial(5));
    }

总结:某些递归是可以通过迭代来实现的,那么递归和迭代能够相互转换的条件是什么呢,我们来看看不同的AI模型的回答

chatgpt:

 讯飞星火:

 腾讯混元:

 百度AI:

 阿里通义千问:(这个截图不全,就贴文字了)

递归与迭代可以相互转换的条件通常基于问题本身的特性。在某些情况下,一个使用递归实现的问题可以通过重新组织代码和使用循环结构(如for、while等)来实现迭代版本。反过来,一些用迭代实现的问题也可能通过引入函数调用自身的方式来实现递归版本。

要判断一个问题是否可以递归与迭代之间转换,可以考虑以下几点:

  1. 可分解性:问题必须能够被分解为更小的同类子问题,这是递归的核心思想。同样,如果问题可以用循环来处理每个元素或状态,则可能适合迭代。

  2. 基本情况的存在:对于递归来说,需要存在一个或多个基本的情况,在这些情况下,不需要进一步递归。对于迭代来说,这通常是循环结束的条件。

  3. 合并子结果:无论是递归还是迭代,都需要一种方式将子问题的结果合并到整个问题的答案中。

  4. 问题规模的变化:在递归过程中,问题规模应该逐渐减小,最终达到基本情况。在迭代过程中,这通常表现为循环变量的变化。

  5. 空间和时间效率:虽然递归和迭代都可以解决同一问题,但它们的时间复杂度和空间复杂度可能会不同。在进行转换时,需要注意是否会影响算法的性能。

尽管大多数情况下递归与迭代可以相互转换,但也有一些特殊情况,比如涉及到特定数据结构(如树、图)的问题,或者一些复杂的动态规划问题,它们可能更适合于使用其中的一种方法,因为另一种方法可能会导致代码变得过于复杂且难以理解。因此,在实际编程中,选择哪种方法取决于具体问题以及对性能和代码可读性的要求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1292207.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UEM 在企业 IT 管理数字化转型有什么帮助

近年大多数公司都在努力实现数字化转型&#xff0c;业务应用程序正在迁移到云端&#xff0c;日常 IT 运营正变得更加面向移动化&#xff0c;高管们使用各种设备。员工不仅使用公司提供的台式机&#xff0c;还经常使用公司拥有的、个人启用的&#xff08;COPE&#xff09;笔记本…

浅析AI智能视频监控技术在城市交通中的作用及意义

城市交通作为整个城市的整体脉络&#xff0c;每天都发挥着重要作用&#xff0c;为了最大程度地避免城市交通堵塞、提高城市交通效率&#xff0c;智能视频监控系统发挥了重要作用。具体表现在以下几个方面&#xff1a; 1、交通违规监管&#xff1a;TSINGSEE青犀智能视频监控系统…

LeetCode刷题--- 计算布尔二叉树的值

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏&#xff1a;http://t.csdnimg.cn/ZxuNL http://t.csdnimg.cn/c9twt 前言&#xff1a;这个专栏主要讲述递归递归、搜索与回溯算法&#xff0c;所以下面题目主要也是这些算法做的 我讲述…

反钓鱼防盗号,共筑校园安全防线!Coremail出席CERNET学术年会

11月27日-30日&#xff0c;中国教育和科研计算机网CERNET第二十八/二十九届学术年会在福州隆重举办&#xff0c;Coremail受邀出席&#xff0c;就高校数字化及网络安全等相关话题与高校老师、行业专家进行广泛交流。 △11月27-30日&#xff0c;Coremail在会场设展&#xff0c;为…

Vue实现注册页面的用户交互

&#x1f4d1;前言 本文主要是【Vue】——Vue实现注册页面的用户交互的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每…

CRM客户管理系统,不止管理客户。

CRM系统现在已经成为企业与客户建立良好关系、提高销售业绩的优先选择。关于CRM的功能&#xff0c;不同的企业包括CRM软件厂商都对CRM系统有不同的定义。基于此&#xff0c;我们来聊聊CRM客户管理系统除了管客户还有什么功能&#xff1f; 1、客户管理 有些企业管理客户的方式…

【互斥锁不当使用导致的条件竞争】2021_DiceCTF_hashbrown

前言 这个题目还挺有意思的&#xff0c;他并不像之前做的题目直接给你一个贴脸的 UAF 等&#xff0c;而是把 UAF 放在了条件竞争的环境下&#xff0c;其实条件竞争这个漏洞在内核中经常出现。 这里题目没有去符号&#xff0c;所以逆向的难度不是很大&#xff0c;但作者似乎在…

【Axure教程】树筛选中继器表格

树和表格是信息系统中两个重要的元件&#xff0c;树结构是一种层次化的数据结构&#xff0c;它以树的形式展示数据的层次关系&#xff1b;表格是一种二维结构&#xff0c;由行和列组成。每一行表示一个记录&#xff0c;每一列表示一个属性。在实际应用中&#xff0c;这两种结构…

陈睿接手一年后,B站全力一搏的游戏业务怎样了

11月末&#xff0c;哔哩哔哩公布了截至2023年9月30日的第三季度财报。 就在去年的这个时候&#xff0c;陈睿宣布亲自接手了B站的游戏业务。因为做游戏比给游戏打广告利润高&#xff0c;因为自研游戏利润更高&#xff0c;更因为年年亏损的B站需要这么高利润的业务来拯救。 但一…

Python文件操作(txt + xls + json)

文章目录 简介1、使用with_open读取和保存&#xff1a;.txt .bin&#xff08;二进制文本&#xff09;1.1、with open语句详解1.1、项目实战 2、使用pandas读取和保存&#xff1a;.xls .xlsx2.1、pandas简介2.2、环境配置2.3、项目实战 3、 使用json.dump读取和保存&#xff1…

MS8091/2运算放大器可Pin to Pin兼容AD8091/2

MS809x 系列是一种易用的、低成本的轨到轨输出电压反馈放大器&#xff0c;它具有典型的电流反馈放大器带宽和转换率的优势&#xff0c;同时也有较大的共模电压输入范围和输出摆幅&#xff0c;这使它很容易在单电源 2.5V 的低压情况下工作。可Pin to Pin兼容AD8091/AD8092。 虽然…

速达软件任意文件上传漏洞复现

简介 速达软件专注中小企业管理软件,产品涵盖进销存软件,财务软件,ERP软件,CRM系统,项目管理软件,OA系统,仓库管理软件等,是中小企业管理市场的佼佼者,提供产品、技术、服务等信息,百万企业共同选择。速达软件全系产品存在任意文件上传漏洞,未经身份认证得攻击者可以通过此漏…

Android渲染-AHardwareBuffer

本文主要从应用的角度介绍android的native层AHardwareBuffer创建纹理以及保存渲染数据。 HardwareBuffer 要介绍native层的AHardwareBuffer&#xff0c;就需要先从Java层的HardwareBuffer说起。Android官方对于HardwareBuffer介绍如下&#xff1a; HardwareBuffer wraps a na…

中国科技巨头:集体变革中 /华为鸿蒙 4:功能、模型、生态三大升级 |魔法半周报

我有魔法✨为你劈开信息大海❗ 高效获取AIGC的热门事件&#x1f525;&#xff0c;更新AIGC的最新动态&#xff0c;生成相应的魔法简报&#xff0c;节省阅读时间&#x1f47b; &#x1f525;资讯预览 中国科技巨头&#xff1a;集体变革中 华为鸿蒙 4&#xff1a;功能、模型、生…

宁夏一男子吸烟“逼”慢高铁 拘留7天 AI技术如何提升公共安全

最近&#xff0c;宁夏的一位男子杨某在高铁卫生间吸烟&#xff0c;触发了列车的烟雾报警系统&#xff0c;导致列车降速运行&#xff0c;最终被拘留7天。这个事件凸显了公共安全的重要性&#xff0c;特别是在交通工具上的安全管理。如果我们能够及时发现并阻止这种行为&#xff…

0011Java程序设计-ssm药店管理系统微信小程序

文章目录 摘 要目 录系统实现5.2服务端开发环境 编程技术交流、源码分享、模板分享、网课分享 企鹅&#x1f427;裙&#xff1a;776871563 摘 要 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机…

互联网医院|北京互联网医院系统开发功能

打造移动互联网医院&#xff0c;就是&#xff0c;通过移动互联网将医院与患者、医院内部&#xff08;医生、护士、领导层&#xff09;、医院与生态链上的各类组织机构连接起来。以患者为中心&#xff0c;优化医院业务流程&#xff0c;提升医疗服务质量与医院资源能效&#xff0…

SQL Server数据库的备份和还原

6.2 SQL Server备份和还原 数据库管理员最担心的情况就是数据库瘫痪&#xff0c;造成数据丢失&#xff0c;而备份作为数据的副本&#xff0c;可以有 效地保护和恢复数据。本节将介绍数据备份的原因&#xff0c;备份的方式.SOL Server的恢复模式.以及备 份策略和备份设备。 6.2…

KubeSphere Marketpalce 上新!Databend Playground 助力快速启动数据分析环境

12 月 5 日&#xff0c;Databend Labs 旗下 Databend Playground&#xff08;社区尝鲜版&#xff09;成功上架青云科技旗下 KubeSphere Marketplace 云原生应用扩展市场&#xff0c;为用户提供一个快速学习和验证 Databend 解决方案的实验环境。 关于 Databend Playground Dat…

视频集中存储/智能分析融合云平台EasyCVR平台接入rtsp,突然断流是什么原因?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…