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

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;}@Testpublic 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);}}@Testpublic 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;}@Testpublic 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.rhkb.cn/news/212199.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Adobe ColdFusion文件读取漏洞(CVE-2010-2861)

任务一&#xff1a; 复现漏洞 任务二&#xff1a; 尝试利用漏洞读取目标系统中的“opt/coldfusion8/license.txt"文件 1.环境搭建&#xff08;网上写的密码是admin&#xff0c;就用admin&#xff09; 2.看答案就是一层一层进行路径穿越攻击&#xff0c;这里要注意如果…

史上最强 Charles 抓包

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

netcore swagger 错误 Failed to load API definition

后端接口报错如下&#xff1a; 前端nswag报错如下&#xff1a; 根据网上查询到的资料说明&#xff0c;说一般swagger这种错误都是控制器里有接口代码异常造成的&#xff0c;通常是接口没有加属性Attribute&#xff0c; 比如[HttpPost("Delete")]、[HttpGet("Del…

Kafka Connect :构建强大分布式数据集成方案

Kafka Connect 是 Apache Kafka 生态系统中的关键组件&#xff0c;专为构建可靠、高效的分布式数据集成解决方案而设计。本文将深入探讨 Kafka Connect 的核心架构、使用方法以及如何通过丰富的示例代码解决实际的数据集成挑战。 Kafka Connect 的核心架构 Kafka Connect 的核…

flutter开发实战-readmore长文本展开和收缩控件

flutter开发实战-readmore长文本展开和收缩控件 当长文本展开和收缩控件&#xff0c;我们需要使用readmore来处理长文本展开和收缩&#xff0c;方便阅读 一、引入readmore 在工程的pubspec.yaml中引入插件 readmore: ^2.1.0ReadMoreText的属性如下 const ReadMoreText(this.…

MySQL 临时数据空间不足导致SQL被killed 的问题与扩展

开头还是介绍一下群&#xff0c;如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题&#xff0c;有需求都可以加群群内&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;&#xff08;共1730人左右 1 2 3 4 5&#xff0…

elementui中添加开关控制

<template><!-- 图层管理 --><div class"home-wrapper"><div class"table-list"><div class"list"><el-table :data"tableData" height"100%" style"width: 100%;" border>&…

Python 爬虫 之scrapy 框架

文章目录 常用的命令开始爬虫请求与响应让控制台只输出想要的信息创建一个py 文件来帮忙运行爬虫 工作原理图实战scrapy 本身自带的选择器使用全部scrapy 自身选择器进行爬虫爬取多个网站 常用的命令 Scrapy是一个用于爬取网站数据的Python框架&#xff0c;以下是一些常用的Sc…

activemq启动成功但web管理页面却无法访问

前提&#xff1a; 在linux启动activemq成功&#xff01;本地能ping通linux 处理方案&#xff1a; 确定防火墙是否关闭&#xff0c; 有两种处理方案&#xff1a;第一种-关闭防火墙&#xff1b;第二种-暴漏8161和61616两个端口 netstat -lnpt查看8161和61616端口 注意&#xf…

JavaWeb-Tomcat

1. Web服务器 web服务器由硬件和软件组成&#xff1a; 硬件&#xff1a;计算机系统软件&#xff1a;计算机上安装的服务器软件&#xff0c;安装后可以为web应用提供网络服务。 常见的JavaWeb服务器&#xff1a; Tomcat&#xff08;Apache&#xff09;&#xff1a;应用最广泛的…

Java毕业设计源码—vue+SpringBoot图书借阅管理图书馆管理系统

主要技术 SpringBoot、Mybatis-Plus、MySQL、Vue3、ElementPlus等 主要功能 管理员模块&#xff1a;注册、登录、书籍管理、读者管理、借阅管理、借阅状态、修改个人信息、修改密码 读者模块&#xff1a;注册、登录、查询图书信息、借阅和归还图书、查看个人借阅记录、修改…

第二十一章

网络通信这一章 基本分为三个部分 网络基础概念和TCP,UDP这三个部分主要如下&#xff1a; 计算机网络实现了堕胎计算机间的互联&#xff0c;使得它们彼此之间能够进行数据交流。网络应用程序就是再已连接的不同计算机上运行的程序&#xff0c;这些程序借助于网络协议&#xf…

html刷题笔记

1 em 12 pt 16 px 100% source元素为audio、video、picture元素指定多个媒体文件 margin是用来隔开元素与元素的间距&#xff1b;padding是用来隔开元素与内容的间隔。 margin用于布局分开元素使元素与元素互不相干&#xff1b;padding用于元素与内容之间的间隔&#xff0c;…

Swift 中 User Defaults 的读取和写入

文章目录 前言介绍 User Defaults共享 User DefaultsUser Defaults 存储数据类型响应更改监控 User Defaults 更改覆盖User Defaults 设置考虑的替代方案Keychain 用于安全性用于跨平台的 CloudKit 结论 前言 User Defaults 是 Swift 应用程序存储在应用启动之间保持的首选项的…

我在Vscode学OpenCV 图像处理一(阈值处理、形态学操作【连通性,腐蚀和膨胀,开闭运算,礼帽和黑帽,内核】)

图像处理一 一、阈值处理1.1 OpenCV 提供了函数 cv2.threshold()和函数 cv2.adaptiveThreshold()&#xff0c;用于实现阈值处理1.1.1. cv2.threshold()&#xff1a;(1)在函数cv2.threshold()中&#xff0c;参数threshold_type用于指定阈值处理的方式。它有以下几种可选的阈值类…

应用程序中实现用户隐私合规和数据保护合规的处理方案及建议

随着移动互联网的发展&#xff0c;用户隐私合规和数据保护合规已经成为应用开发过程中不可忽视的重要环节。为了帮助开发者实现隐私和数据保护合规&#xff0c;本文将介绍一些处理方案和建议。 图片来源&#xff1a;应用程序中实现用户隐私合规和数据保护合规的处理方案及建议 …

Spring IOC,DI原理保姆级带你了解如,让面试官感到你的魅力

Spring IOC&#xff0c;DI原理保姆级带你了解如&#xff0c;让面试官感到你的魅力 一&#xff0c;什么是IOC 1.开始&#xff1a;Spring IoC容器的创建。 容器初始化&#xff1a;初始化IoC容器&#xff0c;包括加载配置文件、解析配置文件等。 加载XML/Java配置文件&#xff1…

『Jmeter超级干货』| Linux下Jmeter安装配置、脚本设计执行、监控及报告完整过程

『Jmeter超级干货』| Linux下Jmeter安装配置、脚本设计执行、监控及报告完整过程 1 JDK安装部署1.1 JDK下载1.2 JDK配置 2 Jmeter安装部署2.1 Jmeter下载2.2 Jmeter安装2.3 Jmeter相关目录配置2.4 Jmeter启动配置2.5 检查并启动 3 Jmeter汉化3.1 临时修改3.2 永久修改 4 准备测…

快照读通过MVCC解决不可重复读当前读通过间隙锁解决幻读

简介 Multi-Version Concurrency Control 多版本并发控制&#xff0c;MVCC 是一种并发控制的方法&#xff0c;一般在数据库管理系统中&#xff0c;实现对数据库的并发访问&#xff1b;在编程语言中实现事务内存。 *往期知识不做重点 事务具有4个特征,分别是原子性、一致性、隔…

毕设:《基于hive的音乐数据分析系统的设计与实现》

文章目录 环境启动一、爬取数据1.1、歌单信息1.2、每首歌前20条评论1.3、排行榜 二、搭建环境1.1、搭建JAVA1.2、配置hadoop1.3、配置Hadoop环境&#xff1a;YARN1.4、MYSQL1.5、HIVE(数据仓库)1.6、Sqoop&#xff08;关系数据库数据迁移&#xff09; 三、hadoop配置内存四、导…