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

Golang笔试题:编写一个函数,接收一个整数参数n,输出n的阶乘结果

今天,我们开发的AI笔试题工具,ai扁食——AI程序员笔试系统给我出了中级Golang题目,就是这道题:《请编写一个函数,接收一个整数参数n,输出n的阶乘结果》,希望我写一个函数,输出n的阶乘结果。我开始的时候没觉得有什么问题,大概写了个实现如下:

// 循环计算n的阶乘
func factorial(n int) int {var result = 1for i := 1; i <= n; i++ {result *= i}return result
}

或者使用递归也行:

// 计算n的阶乘
func factorial1(n int) int {if n == 1 {return 1}return n * factorial1(n-1)
}

后来觉得不对,这看起来不像一个中级题目啊。

跑了个简单测试例,发现这两个实现居然在21的时候就溢出int了。

21的阶乘是-4249290049419214848
21的阶乘是-4249290049419214848

哦,果然隐藏了一个考点。

那golang其实给我们提供了一个大数库:

math.Big

Big库的循环实现版本如下:

// 计算n的阶乘,使用math/big包
func factorial3(n int) *big.Int {var result = big.NewInt(1)for i := 1; i <= n; i++ {result.Mul(result, big.NewInt(int64(i)))}return result
}

或者递归版本

// 计算n的阶乘,使用math/big包,递归实现
func factorial8(n int) *big.Int {if n == 1 {return big.NewInt(1)}var result = big.NewInt(int64(n))return result.Mul(result, factorial8(n-1))
}

最终选择提交了循环版本,递归版本在递归深度较深的时候有非必要的消耗,循环就好。

http://www.lryc.cn/news/171797.html

相关文章:

  • 外包干了2个月,技术退步明显.......
  • 无涯教程-JavaScript - BINOM.DIST函数
  • linux定时重启tomcat
  • 在静态方法中访问@Value注入的静态变量!!
  • 掌握这些算法,让你的编程之路更顺畅——重要算法解析
  • flink集群与资源@k8s源码分析-总述
  • LeetCode 0213. 打家劫舍 II:动动态规划
  • VMware17 不可恢复错误mks解决方案
  • 【深度学习】 Python 和 NumPy 系列教程(廿五):Matplotlib详解:3、多子图和布局:subplot()函数
  • 计算机网络知识补充(1)
  • C# Onnx Yolov8 Pose 姿态识别
  • 7.algorithm2e中while怎么使用
  • Flask狼书笔记 | 08_个人博客(下)
  • 机器学习第十课--提升树
  • react scss.modules中使用iconfont
  • 使用Jmeter+ant进行接口自动化测试(数据驱动)
  • 可视化图表组件之股票数据分析应用
  • STM32 ~ GPIO不同模式之间的区别与实现原理
  • dvwa靶场通关(十二)
  • 【shell学习】企业运维工作中常用的shell脚本
  • 对权限的理解和使用
  • MySQL 5.7 通过数据库idb文件快速导入至另一台数据库
  • 第一章 计算机网络基础
  • 本地电脑搭建SFTP服务器,并实现公网访问
  • 易基因直播预告|细菌微生物基因表达调控表观研究易基因科技
  • Flask在线部署ChatGLM2大模型
  • 浅谈Vue3——父子组件传值
  • Wolfram语言之父:ChatGPT到底能做什么? | 阿Q送书第六期
  • antd a-list 添加分页
  • MySQL注入绕安全狗脚本 -- MySQLByPassForSafeDog,以及端口爆破工具 -- PortBrute配置使用