go中阶乘实现时递归及迭代方式的比较

ops/2024/10/22 6:12:41/
package mainimport ("fmt""time""math/big"
)// 使用递归和 big.Int 计算阶乘
func FactorialRecursive(n *big.Int) *big.Int {if n.Cmp(big.NewInt(0)) == 0 {return big.NewInt(1)}return new(big.Int).Mul(n, FactorialRecursive(new(big.Int).Sub(n, big.NewInt(1))))
}// 使用迭代和 big.Int 计算阶乘
func FactorialIterative(n *big.Int) *big.Int {result := big.NewInt(1)for i := big.NewInt(2); i.Cmp(n) <= 0; i.Add(i, big.NewInt(1)) {result.Mul(result, i)}return result
}func main() {n := big.NewInt(2000)// 递归方法start := time.Now()resultRecursive := FactorialRecursive(new(big.Int).Set(n))durationRecursive := time.Since(start)fmt.Printf("递归计算 %s 的阶乘结果长度: %d 位\n", n, len(resultRecursive.String()))fmt.Printf("递归计算执行时间: %v\n", durationRecursive)// 迭代方法startIterative := time.Now()resultIterative := FactorialIterative(new(big.Int).Set(n))durationIterative := time.Since(startIterative)fmt.Printf("迭代计算 %s 的阶乘结果长度: %d 位\n", n, len(resultIterative.String()))fmt.Printf("迭代计算执行时间: %v\n", durationIterative)// 验证两种方法的结果是否相同if resultRecursive.Cmp(resultIterative) == 0 {fmt.Println("两种方法的结果相同")} else {fmt.Println("错误:两种方法的结果不同")}
}

结果

PS E:\studygo> go run .\chengji.go
递归计算 2000 的阶乘结果长度: 5736 位
递归计算执行时间: 1.6225ms
迭代计算 2000 的阶乘结果长度: 5736 位
迭代计算执行时间: 514.6µs
两种方法的结果相同
PS E:\studygo> go run .\chengji.go
递归计算 2000 的阶乘结果长度: 5736 位
递归计算执行时间: 1.5059ms
迭代计算 2000 的阶乘结果长度: 5736 位
迭代计算执行时间: 0s
两种方法的结果相同


http://www.ppmy.cn/ops/127488.html

相关文章

C++基础与实用技巧第三课:内存管理与性能优化

第二章&#xff1a;C基础与实用技巧 第三课&#xff1a;内存管理与性能优化 1. 动态内存的管理策略与技巧 动态内存管理是C编程的核心部分之一&#xff0c;合理管理内存可以极大提高程序的性能和稳定性。在C中&#xff0c;动态内存的分配和释放通常使用new和delete运算符&am…

Python 网络爬虫教程

在大数据时代&#xff0c;获取数据是至关重要的一步。而网络爬虫是获取网络上公开数据的有效工具之一。本文将介绍如何使用 Python 来编写一个基本的网络爬虫&#xff0c;并通过具体的案例来展示如何抓取和处理网页数据。 1. 什么是网络爬虫&#xff1f; 网络爬虫是一种自动化…

区块链术语

区块链术语 从区块链技术衍生出的术语 从区块链技术衍生出的术语 1.区块链&#xff1a; 区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的应用模式。是一个共享的分布式账本&#xff0c;其中的交易通过附加区块永久记录&#xff0c;记录一旦上链&#x…

iOS 大数相乘

首先说清楚2个概念: 概念1.一个M位数 与一个N位数 相乘,乘积的位数一定小于等于(NM). 如.2数99 乘以 4位数 9999, 其结果为 989901 ,为24 6位数. 上面的概念很重要,因为我们要创建一个初始值都为0, 元素个数为(MN) 的数组, 例如:99x918,我们需要创建23的元素的resultArray[0,…

【学习笔记】网络设备(华为交换机)基础知识 9 —— 堆叠配置

提示&#xff1a;学习华为交换机堆叠配置&#xff0c;含堆叠的概念、功能、角色、ID和优先级&#xff1b;堆叠的建立过程以及注意事项&#xff1b;包含堆叠的配置命令&#xff0c;以及堆叠的配置案例 一、前期准备 1.已经可以正常访问交换机的命令行接口 Console口本地访问教…

el-radio 点击报错 Element with focus: inputAncestor with aria-hidden....

一、序言 浏览器版本影响的问题&#xff08;与代码无关&#xff0c;可能是web或浏览器相关协议更新导致&#xff09;&#xff0c;不影响功能的使用. 翻译&#xff1a;元素上的Blocked aria-hidden&#xff0c;因为刚刚接收焦点的元素不能对辅助技术用户隐藏。避免在焦点元素或…

第一章 Linux安装(二)

文章目录 2.Linux 安装2.1 Linux 哲学思想(重点)2.2 Linux 生产主流版本2.3 安装 Linux 系统2.3.1 Linux安装前准备2.3.1.1 VMware WorkStation下载、安装和网络设置2.3.1.2 下载操作系统2.3.1.3 创建一个新的虚拟机 2.3.2 安装Rocky Linux 9操作系统2.3.3 安装Ubuntu 24.04操作…