第5章 递归.ppt

Hanoi问题 n阶Hanoi塔问题:假设有三个分别命名为X、Y、Z的塔座,在X塔座上插有n个直径大小各不相同,依小到大编号为1,2,…,n的圆盘,要求:把X上的n个圆盘移到Z上,排列顺序相同,移动规则为: 每次只能移动一个圆盘; 圆盘可以在任一塔上做多次移动; 在任何时刻,大盘不能压小盘; Hanoi问题 void Hanoi( int n, char x, char y, char z ) { if( n == 1 ) Move( 1, x, z ); // 把1号盘,从x移到z else { Hanoi( n – 1, x, z, y );// 把n-1个盘,从x移到y,z为辅助塔 Move( n, x, z ); // 把n号盘,从x移到z Hanoi( n – 1, y, x, z );//把n-1个盘,从y移到z,x为辅助塔 } } 递归求n! 递归调用的实现原理 返回时,执行出栈操作,把当前栈顶保留的值送回相应的参数中进行恢复,并按栈顶中的返回地址,从断点处继续执行。 例5.2 利用串的基本运算写出对串求逆的递归算法。 递归模型: s s为空串 f(s)= Concat(f(SubStr(s,2,StrLength(s)-1)),SubStr(s,1,1)) 其他 SqString in

文档评论(0)

1亿VIP精品文档

相关文档