写一个用栈实现递归计算阶乘的c++代码
时间: 2023-10-15 12:07:24 浏览: 129
好的,下面是用栈实现递归计算阶乘的c++代码:
```c++
#include <iostream>
#include <stack>
using namespace std;
int factorial(int n) {
stack<int> s;
s.push(n);
int result = 1;
while (!s.empty()) {
int x = s.top();
s.pop();
result *= x;
if (x > 1) {
s.push(x - 1);
}
}
return result;
}
int main() {
int n;
cout << "请输入一个整数:";
cin >> n;
cout << n << "的阶乘是:" << factorial(n) << endl;
return 0;
}
```
希望对您有帮助!
相关问题
用递归的方法打印n的阶乘,并计算程序运行时间,并100的阶乘用C++实现
递归是一种常见的编程技术,它允许函数调用自身来解决问题。打印n的阶乘(记作n!)可以通过递归方法实现,具体思路是:n的阶乘等于n乘以(n-1)的阶乘。当递归到基本情况,即n等于0或1时,返回1。
下面是一个使用递归实现打印n阶乘的C++代码示例:
```cpp
#include <iostream>
#include <chrono>
// 递归函数计算阶乘
unsigned long long factorial(unsigned int n) {
if (n == 0 || n == 1) {
return 1; // 基本情况
} else {
return n * factorial(n - 1); // 递归调用
}
}
int main() {
unsigned int n = 100; // 计算100的阶乘
auto start = std::chrono::high_resolution_clock::now(); // 开始计时
unsigned long long result = factorial(n);
auto end = std::chrono::high_resolution_clock::now(); // 结束计时
std::chrono::duration<double> diff = end - start;
std::cout << "100的阶乘是: " << result << std::endl; // 打印结果
std::cout << "程序运行时间: " << diff.count() << "秒" << std::endl; // 打印运行时间
return 0;
}
```
在这个代码中,我们使用了C++的`<chrono>`库来计算程序的运行时间。首先记录开始时间,然后执行阶乘计算,最后记录结束时间,并计算两个时间点之间的差值,这个差值就是程序运行的时间。
需要注意的是,使用递归计算较大数的阶乘可能会导致栈溢出错误,因为每次函数调用都会消耗一定的栈空间。此外,对于非常大的数(比如1000的阶乘),结果会超出任何标准数据类型的范围,此时可能需要使用特殊的大数库或者数组来存储结果。
用c++完成以下题目:利用递归写出n的阶乘
好的,以下是用C++递归方式实现求n的阶乘的代码:
```c++
#include <iostream>
using namespace std;
int factorial(int n) {
if (n == 0 || n == 1) { // 递归终止条件
return 1;
}
return n * factorial(n-1); // 递归调用
}
int main() {
int n;
cout << "请输入一个正整数n: ";
cin >> n;
int result = factorial(n);
cout << n << "的阶乘是: " << result << endl;
return 0;
}
```
在上述代码中,我们首先声明了一个递归函数 `factorial()`,它的参数是一个整数 `n`,返回值也是一个整数。然后在函数中,我们设置了递归终止条件:当 `n` 为0或1时,阶乘为1,直接返回1。否则,我们用递归方式调用 `factorial()` 函数,传入参数 `n-1`,并将返回的结果与 `n` 相乘,最终得到 `n` 的阶乘。在主函数中,我们接收用户输入的整数 `n`,并调用 `factorial()` 函数计算 `n` 的阶乘,最后输出结果。
注意,递归函数调用时要注意递归深度,如果递归深度过深,可能会导致栈溢出等问题。因此,在实际应用中,需要根据具体情况来设置递归深度或者使用非递归方法实现。
阅读全文