数据结构练习(29)用递归颠倒栈
http://zhedahht.blog.163.com/blog/static/25411174200943182411790/
思路:
为了用递归而用递归吧。总之,递归很强大,对于理解递归还是很不错的例子。
#include <stack> using namespace std; template <typename T> void top2bottom(stack<T>& nstack, T element) { if (nstack.empty()) nstack.push(element); else { T e = nstack.top(); nstack.pop(); top2bottom(nstack, element); nstack.push(e); } } template <typename T> void ReverseStack(stack<T>& nstack) { if (!nstack.empty()) { T top = nstack.top(); nstack.pop(); ReverseStack(nstack); top2bottom(nstack, top); } } int main() { stack<int> nstack; for (int i = 0; i < 10; ++i) nstack.push(static_cast<int>(i)); ReverseStack(nstack); return 0; }
反思:
void recursive(stack<int>& s) { if (!s.empty()) int t = s.top(); s.pop(); recursive(s); s.push(t); } }
其实上述代码什么也没做,模仿了栈的逻辑,不断的保护数据,缩小规模。
在上述代码逻辑里面试图加入自己的代码,从而改变其固有稳定的代码逻辑,这才是利用递归真正要做的东西。
关于这方面,总感觉还欠缺点思考,欠缺点总结,还需要不断的继续实践啊。
-------------------------------------------------------
kedebug
Department of Computer Science and Engineering,
Shanghai Jiao Tong University
E-mail: kedebug0@gmail.com
GitHub: http://github.com/kedebug
-------------------------------------------------------