文档详情

第三章栈和队列知识点1.ppt

发布:2017-04-19约2.38千字共13页下载文档
文本预览下载声明
第三章 栈和队列;第三章 栈和队列;3.3 栈与递归实现——嵌套调用;一、递归及其实现;例 递归的执行情况分析 void print(int w){ int i; if ( w!=0){ print(w-1); for(i=1;i=w;++i) printf(“%3d,”,w); printf(“/n”); } } 运行结果: 1, 2,2, 3,3,3,;递归调用执行情况如下:;二、Hanoi塔问题;2、解决方法: n=1时,直接把圆盘从X移到Z n1时,先把上面n-1个圆盘从X移到Y,然后将n号盘从X移到Z,再将n-1个盘从Y移到Z。即把求解n个圆盘的Hanoi问题转化为求解n-1个圆盘的Hanoi问题,依次类推,直至转化成只有一个圆盘的Hanoi问题 ;3、算法: main() { int m; printf(Input the number of disks:); scanf(%d,m); printf(The steps to moving %3d disks:\n,m); hanoi(m,‘X,‘Y,‘Z); (0) } (1)void hanoi(int n,char x,char y,char z) { (2) if(n==1) (3) move( x,1,z); (4) else{ (5) hanoi(n-1,x,z,y); (6) move( x,n,z); (7) hanoi(n-1,y,x,z); (8) } (9) } void move(int h,char c,char f){ printf(%d:%c---%c\n,h,c,f); }; main() { int m; printf(Input number of disks”); scanf(%d,m); printf(”Steps : %3d disks”,m); hanoi(m,A,B,C); (0) } void hanoi(int n,char x,char y,char z) (1) { (2) if(n==1) (3) move(x,1,z); (4) else{ (5) hanoi(n-1,x,z,y); (6) move(x,n,z); (7) hanoi(n-1,y,x,z); (8) } (9) }; main() { int m; printf(Input the number of disks scanf(%d,m); printf(The steps to moving %3d hanoi(m,A,B,C); (0) } void hanoi(int n,char x,char y,char z) (1) { (2) if(n==1) (3) move(x,1,z); (4) else{ (5) hanoi(n-1,x,z,y); (6) move(x,n,z); (7) hanoi(n-1,y,x,z); (8) } (9) }; main() { int m; printf(Input the number of disks scanf(%d,m); printf(The steps to moving %3d hanoi(m,A,B,C); (0) } void hanoi(int n,char x,char y,char z) (1) { (2) if(n==1) (3) move(x,1,z); (4) else{ (5) hanoi(n-1,x,z,y); (6) move( x,n,z); (7) hanoi(n-1,y,x,z); (8) } (9) }; main() { int m; printf(Inp
显示全部
相似文档