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 }

先用一个递归拿到栈底元素,再用一个递归逆序栈中元素。这个题对递归的运用非常强势,值得好好品味一波

posted on 2020-09-08 12:00  高数考了59  阅读(155)  评论(0)    收藏  举报