哪位高手给我讲一下pascal递归与回朔?

来源:百度知道 编辑:UC知道 时间:2024/06/20 13:17:52
具体一点,比如为什么和运算过程。举一个例子就够了。

一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。因此,在考虑使用递归算法编写程序时,应满足两点:1)该问题能够被递归形式描述;2)存在递归结束的边界条件。
递归的能力在于用有限的语句来定义对象的无限集合。用递归思想写出的程序往往十分简洁易懂。

[例2] 给出一棵二叉树的中序与后序排列。求出它的先序排列。
[分析] 通过对比二叉树的中序与后序排列,我们可以找出根节点及左右子树。同样的,有可以通过对比左子树的中序与后序排列,找出左子树的根节点……可见,该问题能够被递归描述。当找到最后一个根节点时,递归无法再进行下去,这就是递归结束的边界条件。由此可见,递归算法中常常隐含了分治思想。程序如下:
program chu01_3;
var z,h: string;
procedure find(a,b:string);
var
s,l : integer;
begin
l:=length(b);
if l=1 then Write(b) {边界条件及递归返回段}
else
begin {递归前进段}
Write(b[l]);
s:=pos(b[l],a);
if s-1>0 then find(copy(a,1,s-1),copy(b,1,s-1)); {递归左子树}
if l-s>0 then find(copy(a,s+1,l-s),copy(b,s,l-s)); {递归右子树}
end;
end;
begin
Readln(z);
Readln(h);
Find(z,h);
Readln;
end.
[递归的应用]

1.经典递归
例如hanoi塔问题:经典的递归,原问题包含子问题。有些问题或者数据结构本来就是递归描述的,用递归做很自然。
<