第三章栈和队列知识点1.ppt
文本预览下载声明
第三章 栈和队列;第三章 栈和队列;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
显示全部