1 #include <bits/stdc++.h> 2 using namespace std; 3 4 int getAndRemoveLastElement(stack<int> &s){ 5 int res = s.top(); 6 s.pop(); 7 if(s.empty()) 8 return res; 9 else{ 10 int last = getAndRemoveLastElement(s); 11 s.push(res); 12 return last; 13 } 14 } 15 16 void reverse(stack<int> &s){ 17 if(s.empty()) 18 return; 19 int i = getAndRemoveLastElement(s); 20 reverse(s); 21 s.push(i); 22 } 23 24 int main(){ 25 int n; 26 cin>>n; 27 stack<int> s; 28 vector<int> v(n); 29 for(int i=0;i<n;++i) 30 cin>>v[i]; 31 while(--n >= 0){ 32 s.push(v[n]); 33 } 34 reverse(s); 35 while(!s.empty()){ 36 cout<<s.top()<<" "; 37 s.pop(); 38 } 39 return 0; 40 }
先用一个递归拿到栈底元素,再用一个递归逆序栈中元素。这个题对递归的运用非常强势,值得好好品味一波