C++的stack類并不支持遞歸,因為它的主要作用是后進先出(LIFO)的數據結構,用于存儲一系列的元素,并只能在其一端(稱為棧頂)進行插入和刪除操作。
如果你想在遞歸函數中使用類似棧的功能,你可以使用C++的STL庫中的stack類,或者自己定義一個棧類。
以下是一個簡單的自定義棧類的例子:
#include <iostream>
#include <vector>
using namespace std;
template <typename T>
class Stack {
private:
vector<T> data;
public:
void push(T val) {
data.push_back(val);
}
T pop() {
if (isEmpty()) {
throw runtime_error("Stack is empty");
}
T val = data.back();
data.pop_back();
return val;
}
T top() {
if (isEmpty()) {
throw runtime_error("Stack is empty");
}
return data.back();
}
bool isEmpty() {
return data.empty();
}
};
int factorial(int n) {
Stack<int> s;
s.push(1);
while (n > 1) {
s.push(n);
n = n - 1;
}
int result = 1;
while (!s.isEmpty()) {
result = result * s.pop();
}
return result;
}
int main() {
cout << factorial(5) << endl;
return 0;
}
在這個例子中,我們定義了一個模板類Stack,它有push、pop、top和isEmpty等方法。然后在factorial函數中,我們使用Stack來存儲遞歸調用的結果,以實現遞歸計算階乘的功能。