函数的调用过程,其实就是压栈和出栈,而递归就是自己调用自己,也是压栈和出栈问题,所以,任何递归实现的问题都可以用栈来实现。
#include <iostream>
#include <vector>
int func(int n){
if(n < 1)
return -1;
else if(n == 1)
return 1;
else
return n + func(n-1);
}
class Test{
public:
int result_;
int n_;
int step_;
std::vector<int> vi;
Test(int n):n_(n),result_(0),step_(1){}
void each(){
while(1){
switch(step_){
case 1:
vi.push_back(n_--);
step_ = 2;
break;
case 2:
if(n_ == 0)
step_ = 3;
else
step_ = 1;
break;
case 3:
result_ = result_ + vi.back();
vi.pop_back();
if(vi.empty())
step_ = 4;
else
step_ = 3;
break;
case 4:
return;
}
}
}
};
int main(){
int result = func(4);
std::cout << "result = " << result << std::endl;
Test t(4);
t.each();
std::cout << "result = " << t.result_ << std::endl;
return 0;
}