题目的主要信息:
- 编写一个函数 long long factorial(int n),用于计算的阶乘
- 要求使用递归实现
- 的范围是1-20
具体做法:
首先20的阶乘会超出int型的表示范围,因此题目用到了long long。
一个数的阶乘就是,我们可以将求的阶乘看成问题,而,这样我们就将的问题化为了的子问题,我们不断往前每次递归的值乘上子问题的答案就可以了,直到结束递归。
#include <iostream>
using namespace std;
long long factorial(int n);
int main() {
int n;
cin >> n;
cout << factorial(n) << endl; //输出递归结果
return 0;
}
long long factorial(int n) { //递归函数
if(n == 1)
return 1;
return factorial(n - 1) * n; //递归计算n*f(n-1)
}
复杂度分析:
- 时间复杂度:,一共递归次
- 空间复杂度:,需要直接到递归栈最深再往上乘(如图),因此递归栈最大深度也为