1. 程式人生 > 實用技巧 >1.3 如何僅用遞迴函式和棧操作逆序一個棧

1.3 如何僅用遞迴函式和棧操作逆序一個棧

 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 }

先用一個遞迴拿到棧底元素,再用一個遞迴逆序棧中元素。這個題對遞迴的運用非常強勢,值得好好品味一波