简单阶乘计算

 我来答
匿名用户
2020-12-01
展开全部
如何实现一个阶乘运算?
举例
输入:int n
比如n = 5, n = 8
输出:int x
n = 5,5的阶乘, 所以x = 120
n = 8,8的阶乘,所以x = 40320
题目介绍
阶乘问题是一个简单的数学问题,今天我们之所以提到这个问题是因为它和recursion之间有着不解之缘。有些同学可能能够迅速用recursion的方法做出这道题目,但是对recursion本身的了解并没有那么透彻。提到recursion,阶乘问题可以作为一个典型的例子,让大家能够由浅入深地了解recurion。这道阶乘运算是Microsoft的面试题之一,而跟recursion相关的题型也是大家在许多公司的面试中会遇见的。
今天希望大家忘掉这道题目的答案,跟我一起重新思考。阶乘是指用1乘以2乘以3乘以4,一直乘到所要求的数。例如所要求的数n = 5,则结果 x = 1 × 2 × 3 × 4 × 5,这里的乘积x就是n的阶乘。
分析题意
阶乘是指用1乘以2乘以3乘以4,一直乘到所要求的数。例如所要求的数n = 5,则结果 x = 1 × 2 × 3 × 4 × 5,这里的乘积x就是n的阶乘。
分析解题思路
了解了阶乘的定义以后,我们可以思考一个问题,我们想要知道n的阶乘,那么只需要知道n - 1的阶乘,我们想要知道n - 1的阶乘,那么只需要知道n - 2的阶乘,也就是说规模为n的问题,转化为了规模更小的问题。根据这个性质,我们应该自然而然的联想到recursion。
这里让我们一起回顾一下什么是recursion,在表象上recursion是直接或者间接调用自身函数的方法,而本质上是把一个大规模的问题变成比它小一个规模的问题。
既然如此,对于这道题目,我们可以试着用recursion的思想来解决。解决recursion的问题,我们第一步要想base case是什么,即最小规模的问题是什么, 这也是这个函数的终止条件,没有这个条件,我们所写的函数就会永无止境的运行下去。那么对于阶乘来说,当n <= 1的时候(在这里我们不考虑负数,0! = 1, 1! = 1),结果都是1,这就是它的最小规模问题。
第二步我们开始思考recursion rule,怎样把这个问题变成更小规模的问题。比如我们想解决n的阶乘,那么我们只要解决n - 1的阶乘,最后再用(n - 1)的阶乘乘以n就是我们想要的结果。
所以如果n = 5,那么5的阶乘和5 * factorial(4)的结果相同。
综合第一步和第二步,我们可以开始编写阶乘函数:
int factorial (int n) {
if (n <= 1) {
return 1;
}
return n * factorial(n - 1);
}
在这个方法中我们需要注意返回的类型是int,所以它可以解决的阶乘数也是有范围的。
帐号已注销
2020-12-01 · TA获得超过1.6万个赞
知道答主
回答量:11.7万
采纳率:4%
帮助的人:6283万
展开全部
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
嬅哉C3
高粉答主

2021-01-19 · 关注我不会让你失望
知道答主
回答量:9.7万
采纳率:6%
帮助的人:4851万
展开全部

一分钟了解阶乘

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式