当前位置: 首页 > news >正文

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

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.mrgr.cn/news/54341.html

相关文章:

  • H3C路由器交换机操作系统介绍
  • Spring Boot 核心理解-自定义Starter
  • 第三季度中国游戏市场收入创历史新高;京东物流与淘宝天猫达成合作;YouTube 上线“用相机拍摄”标签....|网易数智日报
  • 200台设备如何做到运行半年0故障?工厂设备管理这些环节是关键!
  • 来自骨关节炎计划的膝关节MR图像的自动异常感知3D骨骼和软骨分割|文献速递-基于生成模型的数据增强与疾病监测应用
  • c语言基础程序——经典100道实例。
  • 【MySQL】提高篇—索引与性能优化:如何创建与管理索引
  • go 中的斐波那契数实现以及效率比较
  • LeetCode题练习与总结:摆动排序 Ⅱ--324
  • 系统架构设计师教程 第18章 18.7 系统架构的脆弱性分析 笔记
  • 智能农业:科技推动的现代农业革命
  • STM32应用详解(3)GPIO应用之通过IO端口读取按键的状态
  • TypeScript
  • Spark安装
  • 教电脑“看”图片
  • 【4046倍频电路】2022-5-15
  • Linux操作系统切换设置系统语言
  • 用HTML标签承载页面内容:前端开发的基础知识
  • [实时计算flink]Flink SQL作业快速入门
  • OpenHarmony中EAP-PEAP认证支持 GTC方式
  • 21世纪当代国学易经起名大师颜廷利:全球知名哲学家思想家
  • JavaWeb——Maven(5/8):依赖管理-依赖配置(Maven 项目中的依赖配置、访问仓库网站、配置依赖的注意事项)
  • 自动机器学习(AutoML)
  • 苹果最新的M4 MacBook Pro
  • python 字符串的格式化与eval()
  • 【Linux-进程间通信】匿名管道+4种情况+5种特征