c++递归实现求n的阶乘
时间: 2024-10-27 11:07:55 浏览: 37
在C++中,可以使用递归来实现计算一个整数n的阶乘。阶乘是一个正整数n与所有小于它的正整数相乘的结果,通常表示为n!。以下是递归函数的一个示例:
```cpp
#include <iostream>
using namespace std;
// 递归函数,计算n的阶乘
int factorial(int n) {
if (n == 0 || n == 1) { // 基本情况:0和1的阶乘都是1
return 1;
} else {
// 递归情况:n的阶乘等于n乘以(n-1)的阶乘
return n * factorial(n - 1);
}
}
int main() {
int num;
cout << "请输入一个非负整数:";
cin >> num;
// 检查输入是否合法
if (num < 0) {
cout << "错误:阶乘只对非负整数有意义。\n";
} else {
long long result = factorial(num); // 防止结果溢出,使用long long存储大数值
cout << "该数字的阶乘是:" << result << endl;
}
return 0;
}
```
相关问题
c++实现递归求n的阶乘
在 C++ 中,你可以使用递归来实现计算一个整数 n 的阶乘。阶乘是指从 1 到 n 所有正整数的乘积。以下是递归函数的一个例子:
```cpp
#include <iostream>
// 定义阶乘函数
int factorial(int n) {
// 基线条件:0和1的阶乘都是1
if (n == 0 || n == 1)
return 1;
// 递归条件:n的阶乘等于n乘以(n-1)的阶乘
else
return n * factorial(n - 1);
}
int main() {
int num;
std::cout << "请输入一个非负整数:";
std::cin >> num;
try {
// 计算并打印阶乘结果
long long result = factorial(num); // 使用long long防止溢出
std::cout << "该数的阶乘是:" << result << std::endl;
} catch (const std::overflow_error& e) {
std::cerr << "计算过程中发生溢出:" << e.what() << std::endl;
}
return 0;
}
```
在这个程序中,当你输入一个整数 `num` 后,它会调用 `factorial` 函数来计算其阶乘。如果输入的数字太大导致结果超出长整型范围,可能会引发溢出错误。
c++非递归实现求n的阶乘
在C++中,非递归的方式计算n的阶乘可以使用循环结构,比如for或while循环。下面是一个简单的示例,展示了如何使用迭代的方式来避免函数调用栈的深度增加:
```cpp
#include <iostream>
// 使用迭代法计算阶乘
unsigned long long factorial(int n) {
if (n == 0 || n == 1) { // 阶乘的基本情况,0和1的阶乘都是1
return 1;
}
unsigned long long result = 1; // 初始化结果为1
for (int i = 2; i <= n; ++i) {
result *= i; // 每次循环将当前数乘到结果上
}
return result;
}
int main() {
int num;
std::cout << "请输入一个整数:";
std::cin >> num;
try {
if (num < 0) {
throw std::invalid_argument("阶乘不接受负数"); // 非负整数才允许有阶乘
}
std::cout << "阶乘结果是: " << factorial(num) << std::endl;
} catch (const std::exception& e) {
std::cerr << e.what() << std::endl;
}
return 0;
}
```
在这个程序中,`factorial`函数通过循环逐步累积乘积,直到达到给定的`n`值。注意处理了输入负数的情况。
阅读全文