1.3 如何僅用遞迴函式和棧操作逆序一個棧
阿新 • • 發佈:2020-09-08
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 returnlast; 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 }
先用一個遞迴拿到棧底元素,再用一個遞迴逆序棧中元素。這個題對遞迴的運用非常強勢,值得好好品味一波