当前位置: 首页 > 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.lryc.cn/news/465116.html

相关文章:

  • Jupyter notebook中更改字体大小
  • 关于Ubuntu服务器的时间同步设置以及Linux什么时候开始使用swap虚拟内存
  • Java Stream API 详解
  • 一文了解大模型中的SDK和API
  • element plus的el-select分页
  • STM32CubeMX【串口收发USART】
  • 【学术会议投稿】Java Web开发实战:从零到一构建动态网站
  • [Unity]内存优化
  • FreeRTOS工程创建,创建多任务程序,基于汇编对ARM架构的简单理解
  • C++STL--------list
  • M1 Mac打开Jupyter notebook
  • docker 仓库之harbor详解
  • 【环境变量】windons的Path
  • go语言里的切片
  • 革新你的智能体验:AIStarter 3.1.1正式版现已上线【安全认证】ai应用市场,数字人,ai绘画,ai视频,大模型,工作流因有尽有
  • 【练习17】数组中的最长连续子序列
  • 2024 最适合 Web 开发者的 9 款 Chrome 扩展
  • React综合指南(二)
  • XML\XXE漏洞基本原理
  • uniapp小程序自定义聚合点
  • Spring Boot在线考试系统:JavaWeb技术的应用案例
  • Linux在服务器多节点下面如何快速查找日志
  • 模数转换ADC0804的应用
  • CBAM中关于碳关税抵销
  • 2.5 windows xp,ReactOS系统快速系统调用的实现
  • AI助力广交会,人工智能在制造业有哪些应用场景?
  • ElementPlus-Table表格-单选--TypeScript进阶篇
  • 三大智能体平台深度对比:字节Coze、百度AppBuilder、智谱智能体优劣解析
  • 【Flutter】基础入门:自定义Widget
  • 程序员日志之DNF手游装备武器升级55级攻略