递归与调用栈工作原理-典型递归例题实现
2015-07-08 17:48
239 查看
1汉诺塔问题:
递归工作栈:
2.全排列
对应的递归树:
#include <iostream> using namespace std; void hanoi(int n,char x,char y,char z); void move(int n,char x,char z); int main(){ char a='A',b='B',c='C'; hanoi(3,a,b,c); return 0; } void hanoi(int n,char x,char y,char z){ if(n == 1){ move(1,x,z); return; } else{ hanoi(n-1,x,z,y); move(n,x,z); hanoi(n-1,y,x,z); } } void move(int n,char x,char z){ cout << x << "->" << z << endl; }对应的递归树:(很好的帮助理解递归工作栈原理的工具)
递归工作栈:
2.全排列
#include <iostream> using namespace std; #define N 3 int a ={1,2,3}; void swap(int i,int j); void perm(int a[],int begin,int end); int main(){ perm(a,0,2); return 0; system("pause"); } void perm(int a[],int begin,int end){ int i,j; if(begin == end){ for(i = 0; i < N; i++){ cout << a[i] << " "; } cout << endl; return; } else{ for(j = begin; j <= end; j++){ swap(begin, j); perm(a, begin+1, end); swap(begin, j); } } } void swap(int i,int j){ int tmp; tmp = a[i]; a[i] = a[j]; a[j] = tmp; }
对应的递归树:
相关文章推荐
- android adb介绍
- 【算法学习笔记】67.状态压缩 DP SJTU OJ 1383 畅畅的牙签袋
- 如何在Java客户端调用RESTful服务
- 2012年5月SAT香港真题解析
- oracle archivelog模式与非archivelog模式转换
- 七、Oracle分页
- jQuery上传插件Uploadify 3.2用法
- Android 屏幕适配相关解决方案
- static块相关例子
- Spring学习笔记——Spring的自动装配
- FragmentPagerAdapter和FragmentStatePagerAdapter的区别
- 教你手工mysql拆库
- 【学习】CALayer实现,界限、透明度、位置、旋转、缩放组合动画
- Java内存泄露原因详解
- conn system/orcl as sysdba ERROR: ORA-01031: insufficient privileges
- Python记录日志的方法
- Python记录日志的方法
- Hive性能调校
- Implicit conversion from enumeration type 'enum CGImageAlphaInfo' to different enumeration type 'CGB
- 正则表达之----验证数字的正则表达式集