输入一个正整数n的值(n不超过20),编程输出n!(n的阶乘)。程序中的整数请定义成long long型。请定义递归函数计算阶乘。
时间: 2023-06-01 22:01:45 浏览: 347
编写程序,输入整数 n,计算并输出 n 的阶乘
### 回答1:
以下是用C++编写的递归函数计算n!的程序:
```
#include<iostream>
using namespace std;
long long factorial(int n) {
if(n == 1) {
return 1;
}
return n * factorial(n-1);
}
int main() {
int n;
cin >> n;
cout << n << "!=" << factorial(n) << endl;
return 0;
}
```
输入n的值,输出n!。
### 回答2:
阶乘是指从1连乘到n的结果,用数学公式表示为n! = 1 × 2 × 3 × … × (n-1) × n。要求编写一个递归函数来计算n的阶乘。
递归函数的实现如下:
```c++
long long factorial(int n){
if(n == 1 || n == 0) // 边界条件
return 1;
else
return n * factorial(n-1); // 递归调用
}
```
首先,判断边界条件,若n为1或0,则返回1;否则递归调用自身,将n乘以n-1的阶乘,直至n等于1或0为止。递归函数的实现时要注意返回值类型为long long型,以避免阶乘结果过大而导致溢出。
主函数中,先输入正整数n的值,并进行数据类型检查,然后调用递归函数输出n的阶乘。
完整代码如下:
```c++
#include <iostream>
using namespace std;
long long factorial(int n){
if(n == 1 || n == 0) // 边界条件
return 1;
else
return n * factorial(n-1); // 递归调用
}
int main(){
int n;
cout << "请输入一个正整数n(n不超过20):" << endl;
cin >> n;
if(n < 0 || n > 20){
cout << "输入不合法,请重新输入" << endl;
main();
}
else{
cout << n << "的阶乘为:" << factorial(n) << endl;
}
return 0;
}
```
注意,由于用户输入的n可能不符合要求,因此需加入数据类型检查,若n小于0或大于20则输出提示信息并重新调用主函数,否则调用递归函数输出结果。
### 回答3:
阶乘是指一个数与小于它的所有正整数的积,如3! = 3 × 2 × 1 = 6。
编写一个递归函数来计算阶乘,可以使用以下算法:
1. 如果 n 等于 0 或 1,返回 1
2. 否则,返回 n * factorial(n-1)
代码如下:
```cpp
#include <iostream>
using namespace std;
long long factorial(int n) {
if(n == 0 || n == 1) { // base case
return 1;
} else {
return n * factorial(n - 1); // recursive case
}
}
int main() {
int n;
cin >> n;
cout << factorial(n) << endl;
return 0;
}
```
在主函数中,我们输入一个正整数 n 并调用递归函数来计算 n 的阶乘。注意,我们将 n 定义为 int 类型,但在递归函数中,我们将其传递为 long long 类型,以防止阶乘的计算结果溢出。
如果 n 输入为 5,程序将输出 120,即 5 的阶乘。
阅读全文