数据结构 递归算法 ppt 课件
合集下载
第五讲递推与递归PPT课件

开始,每1项等于前面3项的和。
f(n)=f(n-1)+f(n-2)+f(n-3)-----递推公式 f(1)=1 , f(2)=2 , f(3)=4 --------递推边界
27
① #include <stdio.h> //上楼问题
② void main( )
③ { int x,n,i,a,b,c;
3)第二只猴子醒来,又把桃子均分成五堆后,还是多了一 个,它也吃掉这个桃子,并拿走了其中一堆。
第三只,第四只,第五只猴子都依次如此分食桃子。 问:五只猴子采得一堆桃子数最少应该有几个呢?
11
例2:猴子分食桃子---逆推法
算法分析:
先要找第N只猴子和其面前桃子数的关系。如 果从第1只开始往第5只找,不好找,但如果思路 一变,从第N到第1去,可得出下面的推导式:
19
例11.2 骨牌问题---顺推法
➢长度为n时的骨牌铺放方案? ➢从最简单的情况开始寻找问题解决的规律?--- 顺推 ➢以 f(i) 表示n=i时的铺放方案数目。 ➢当n=1时,只有1种铺法,即f(1)=1,如下左图所示: ➢当n=2时,只有2种铺法,即f(2)=2,如下右图所示。
20
例11.2 骨牌问题---顺推法
n=1
f(n)=1
n=2
f(n)=2
n=3
f(n)=3
n=4
f(n)=3 + 1 =f[3]+ f[1]=4
n=5
f(n)=f(4)+f(2)
n=6
f(n)=f(5)+f(3)
n=7
f(n)=f(6)+f(4)
规律: f(n)=f(n-1)+f(n-3) (n>=4) 17
数据结构课件第5章递归

else fact=w* fact ( w-1);
return fact; }
递归调用执行情况如下:
int fact (int w) {1if ( w==0) 2 fact= 1; 3else 4fact=w* fact( w-1); }
递归思路
实际上, 递归思路是把一个不能或不好直接求解 的“大问题”转化成一个或几个“小问题”来解决, 再把这些“小问题”进一步分解成更小的“小问题” 来解决,如此分解,直至每个“小问题”都可以直接解 决(此时分解到递归出口)。
但递归分解不是随意的分解,递归分解要保证“大 问题”与“小问题”相似,即求解过程与环境都相似。 并且有一个分解的终点。从而使问题可解。
假 设 f(A,i-1) 已 求 出 , 则 f(A,i)=MIN(f(A,i1),A[i]),其中MIN()为求两个值较小值函数。因 此得到如下递归模型:
A[0] 当i=0时 f(A,i)=
MIN(f(A,i-1),A[i]) 其他情况
由此得到如下递归求解算法:
float f(float A[],int i) { float m;
n!
n
1, (n 1)!,
当n 0时 当n 1时
该问题的算法为: int Fact ( int n )
{ int m; if (n= =0) return(1); else { m=n*Fact(n-1); return(m); } }
例如: 试编一个递归函数,求第n项Fibonacci级数的
} } // delete
5.3 递归算法到非递归算法的转换
递归算法有两个基本特性:一是递 归算法是一种分而治之的、把复杂问 题分解为简单问题的求解问题方法,对 求解某些复杂问题,递归算法分析问题 的方法是十分有效的;二是递归算法 的时间/空间效率通常比较差。
return fact; }
递归调用执行情况如下:
int fact (int w) {1if ( w==0) 2 fact= 1; 3else 4fact=w* fact( w-1); }
递归思路
实际上, 递归思路是把一个不能或不好直接求解 的“大问题”转化成一个或几个“小问题”来解决, 再把这些“小问题”进一步分解成更小的“小问题” 来解决,如此分解,直至每个“小问题”都可以直接解 决(此时分解到递归出口)。
但递归分解不是随意的分解,递归分解要保证“大 问题”与“小问题”相似,即求解过程与环境都相似。 并且有一个分解的终点。从而使问题可解。
假 设 f(A,i-1) 已 求 出 , 则 f(A,i)=MIN(f(A,i1),A[i]),其中MIN()为求两个值较小值函数。因 此得到如下递归模型:
A[0] 当i=0时 f(A,i)=
MIN(f(A,i-1),A[i]) 其他情况
由此得到如下递归求解算法:
float f(float A[],int i) { float m;
n!
n
1, (n 1)!,
当n 0时 当n 1时
该问题的算法为: int Fact ( int n )
{ int m; if (n= =0) return(1); else { m=n*Fact(n-1); return(m); } }
例如: 试编一个递归函数,求第n项Fibonacci级数的
} } // delete
5.3 递归算法到非递归算法的转换
递归算法有两个基本特性:一是递 归算法是一种分而治之的、把复杂问 题分解为简单问题的求解问题方法,对 求解某些复杂问题,递归算法分析问题 的方法是十分有效的;二是递归算法 的时间/空间效率通常比较差。
数据结构与程序设计(王丽苹)11-递归PPT课件

它的工作原理是每一次从待排序的数据 它的工作原理是通过构建有序序列,对
元素中选出最小(或最大)的一个元素, 于未排序数据,在已排序序列中从后向
存放在序列的起始位置,直到全部待排
前扫描,找到相应位置并插入。
序的数据元素排完。
图的遍历算法的递归实现
深度优先遍历是一种用于遍历或搜索树或图的算法。这个算法会尽可能深地搜索树的分支。 当节点v的所在边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。
本课程将介绍递归的基本概念、 原理和应用,以及递归算法的设
计和实现。
课程目标
掌握递归的基本概念和原理, 理解递归算法的设计思想。
学习如何使用递归解决实际问 题,提高算法设计和编程能力。
了解递归算法的时间复杂度和 空间复杂度分析方法,掌握如 何优化递归算法。
02 递归概念
什么是递归
递归是一种解决问题 的方法,通过将问题 分解为更小的子问题 来求解。
递归的分类
01
02
03
04
直接递归
函数直接调用自身。
间接递归
函数通过调用其他函数间接调 用自身。
尾递归
函数最后一步操作是调用自身 。
多重递归
一个函数同时调用多个其他函 数,这些函数又调用自身。
03 递归在数据结构中的应用
数组的递归操作
数组的排序
使用递归可以将数组分成两部分,分 别对左半部分和右半部分进行排序, 然后合并结果。例如快速排序和归并 排序。
广度优先遍历是一种图遍历算法,它会先访问离起始节点最近的节点。广度优先遍历可以使 用队列数据结构来实现。
回溯法是一种基于试错的搜索法,按照选定的约束条件,从根节点出发搜索解空间树,当约 束条件无法满足时,则回溯到前一个节点继续搜索。
递归算法课件

写成函数形式,则为:
当n 0时 1 f ( n) n * f (n 1) 当n 0时
这种函数定义的方法是用阶乘函数自己本身定义了 阶乘函数,称上式为阶乘函数的递推定义式。
数学归纳法表明,如果我们知道某个论点对最小的情 形成立,并且可以证明一个情形暗示着另一个情形,那么我 们就知道该论点对所有情形都成立。 数学有时是按递归方式定义的。 例1:假设S(n)是前n个整数的和,那么S(1)= 1,并且 我们可以将S(n)写成S(n)= S(n-1)+ n。 根据递归公式,我们可以得到对应的递归函数: int S(int n) { if (n == 1) return 1; else return S(n-1) + n; } 函数由递归公式得到,应该是好理解的,要想求出S (n),得先求出S(n-1),递归终止的条件(递归出口)是(n == 1)。
↑
low 第二次: 下标 元素值 0 1 1 3 2 4
↑
mid 3 5 4 17 5 18 6 31
↑
high 7 33
↑
low 第三次: 下标 元素值 0 1 1 3 2 4 3 5 4 17
↑
mid 5 18 6 31
↑
high 7 33
↑
low high mid
• Public static void main(String args[]) •{ • int[] shus={1,3,4,5,17,18,31,33};
求Fib(5)的递归计算过程如图所示。
Fib(5) Fib(4) Fib(3) Fib(2) Fib(1) Fib(2) Fib(3) Fib(2) Fib(1) Fib(0)
Fib(1) Fib(0) Fib(1)
当n 0时 1 f ( n) n * f (n 1) 当n 0时
这种函数定义的方法是用阶乘函数自己本身定义了 阶乘函数,称上式为阶乘函数的递推定义式。
数学归纳法表明,如果我们知道某个论点对最小的情 形成立,并且可以证明一个情形暗示着另一个情形,那么我 们就知道该论点对所有情形都成立。 数学有时是按递归方式定义的。 例1:假设S(n)是前n个整数的和,那么S(1)= 1,并且 我们可以将S(n)写成S(n)= S(n-1)+ n。 根据递归公式,我们可以得到对应的递归函数: int S(int n) { if (n == 1) return 1; else return S(n-1) + n; } 函数由递归公式得到,应该是好理解的,要想求出S (n),得先求出S(n-1),递归终止的条件(递归出口)是(n == 1)。
↑
low 第二次: 下标 元素值 0 1 1 3 2 4
↑
mid 3 5 4 17 5 18 6 31
↑
high 7 33
↑
low 第三次: 下标 元素值 0 1 1 3 2 4 3 5 4 17
↑
mid 5 18 6 31
↑
high 7 33
↑
low high mid
• Public static void main(String args[]) •{ • int[] shus={1,3,4,5,17,18,31,33};
求Fib(5)的递归计算过程如图所示。
Fib(5) Fib(4) Fib(3) Fib(2) Fib(1) Fib(2) Fib(3) Fib(2) Fib(1) Fib(0)
Fib(1) Fib(0) Fib(1)
《数据结构与算法》PPT课堂课件-第5章-递归

(2) if(n==1)
(3) move(x,z);
(4) else{
(5)
hanoi(n-1,x,z,y);
(6)
move(x,z);
(7)
hanoi(n-1,y,x,z);
(8) }
(9) }
A
B
C
2BAC 8 3ABC 0
1BCA6 2BAC 8 3ABC 0
A
B
C
2BAC 8 3 A B C 0 15
O(n)。对比循环结构的Fib2(n)和递归结构的Fib(n)可发现,循环结构
的Fib2(n)算法在计算第n项的斐波那契数列时保存了当前已经计算得到
的第n-1项和第n-2项的斐波那契数列,因此其时间复杂度为O(n);而递
归结构的Fib(n)算法在计算第n项的斐波那契数列时,必须首先计算第n -1项和第n-2项的斐波那契数列,而某次递归计算得出的斐波那契数列, 如Fib(n-1)、Fib(n-2)等无法保存,下一次要用到时还需要重新递归计
{ printf(“参数错!”);
return -1;
}
if(n == 0) return 1;
else {y = Fact(n - 1); /*递归调用*/
return n * y; }
}
5
为说明该递归算法的执行过程,设计主函数如下
void main(void) {
long int fn;
fn = Fact(3); }
(1) {
(2) if(n= =1)
(3) move(x,z);
(4) else{
(5)
hanoi(n-1,x,z,y);
(6)
move(x,z);
递归算法 ppt课件

综合上述两种情况,应用加法原理,得出n个元素的集合 {a1,a2,……,an}划分为k个子集的划分数为以下递归公 式:S(n,k)=S(n-1,k-1) + k * S(n-1,k) (n>k,k>0)。
下面,我们来确定S(n,k)的边界条件,首先不能把n个元素 不放进任何一个集合中去,即k=0时,S(n,k)=0;也不可能 在不允许空盒的情况下把n个元素放进多于n的k个集合中去, 即k>n时,S(n,k)=0;再者,把n个元素放进一个集合或把n 个元素放进n个集合,方案数显然都是1,即k=1或k=n时, S(n,k)=1。
//调用下一层递归
}
int main()
{
int n,k;
cin >> n >> k;
cout << s(n,k);
return 0;
}
ppt课件
19
【例6】数的计数(Noip2001)
【问题描述】
我们要求找出具有下列性质数的个数(包括输入的自然数n)。先输入一 个自然数n(n≤1000),然后对此自然数按照如下方法进行处理:
成一个子集。则问题相当于先把a1,a2,……,an-1 划分成k
个子集,这种情况下划分数共有S(n-1,k)个;然后再把元素
an加入到k个子集中的任一个中去,共有k种加入方式,这样对
于an的每一种加入方式,都可以使集合划分为k个子集,因此
根据乘法原理,划分数共有k p*pt课S件(n-1,k)个。
17
ppt课件
7
【例3】Hanoi汉诺塔问题
有N个圆盘,依半径大小(半径都不同),自下而上套在A柱上,每次只允 许移动最上面一个盘子到另外的柱子上去(除A柱外,还有B柱和C柱,开始时这 两个柱子上无盘子),但绝不允许发生柱子上出现大盘子在上,小盘子在下的情 况,现要求设计将A柱子上N个盘子搬移到C柱去的方法。 【算法分析】
递归及递归算法分析课件

A(1,1)=2故A(n,1)=2*n ❖ M=2时,A(n,2)=A(A(n-1,2),1)=2A(n-1,2),和
A(1,2)=A(A(0,2),1)=A(1,1)=2,故A(n,2)= 2^n 。
2 222
❖ M=3时,类似的可以推出
n
❖ M=4时,A(n,4)的增长速度非常快,以至于没有适当的数 学式子来表示这一函数。
❖
move(a,b);
❖
hanoi(n-1, c, b, a);
❖
}
❖}
❖ T(n)=2T(n-1)+O(1) n≥1
T(n)=2n-1
0
n=0
4
27
简单递归式的求解
1.T(n)=T(n-1)+c1 n>1
c2
n=1
2. T(n)=2T(n/2)+c1 n ≥2
c2
n<2
3. T(n)=2T(n/2)+Θ(n) n ≥2
O(1)
n<2
28
T( n/2 ) + T( n/2 ) + 1
例1 T(n) =
0
(n = 1)
解 :T(n)=2T(n/2)+1
=22T(n/22)+2+1
=23T(n/23)+22+2+1
令2r=n =2rT(1)+2r-1+。。。+2+1
=(1-2r)/(1-2)=n-1
∴ T( n ) = n - 1
25
递归算法的时间复杂度分析
❖ 递归函数求解
简单递归式求解 master method 递推方程的特征方程求解
A(1,2)=A(A(0,2),1)=A(1,1)=2,故A(n,2)= 2^n 。
2 222
❖ M=3时,类似的可以推出
n
❖ M=4时,A(n,4)的增长速度非常快,以至于没有适当的数 学式子来表示这一函数。
❖
move(a,b);
❖
hanoi(n-1, c, b, a);
❖
}
❖}
❖ T(n)=2T(n-1)+O(1) n≥1
T(n)=2n-1
0
n=0
4
27
简单递归式的求解
1.T(n)=T(n-1)+c1 n>1
c2
n=1
2. T(n)=2T(n/2)+c1 n ≥2
c2
n<2
3. T(n)=2T(n/2)+Θ(n) n ≥2
O(1)
n<2
28
T( n/2 ) + T( n/2 ) + 1
例1 T(n) =
0
(n = 1)
解 :T(n)=2T(n/2)+1
=22T(n/22)+2+1
=23T(n/23)+22+2+1
令2r=n =2rT(1)+2r-1+。。。+2+1
=(1-2r)/(1-2)=n-1
∴ T( n ) = n - 1
25
递归算法的时间复杂度分析
❖ 递归函数求解
简单递归式求解 master method 递推方程的特征方程求解
第5章 递归数据结构课件

23
• utype = 0: 广义表专用的表头结点
1:整型原子结点 2:字符型原子结点 3:子表节点 • 值域随着不同类型的节点,存放不同的内容,并用不同的名字来表示, 实际上value部分可变的, 用union实现. utype=0, ref:存放引用计数 utype=1, intgrinfo:存放整数值 utype=2, charinfo:存放字符型数据 utype=3, hlink:指向子表表头的指针
xy 坐标
dir 方向
struct items { int x,y,dir;
}
2021/4/23
15
6.具体实现算法 1.mark[1][1]=1; //[1][1]是入口 2.stack<items>st(m*p); //开辟工作栈,大小为m*p 3.items tmp;//设一工作结构变量
tmp.x=1;tmp.y=1;tmp.dir=E;st.push(tmp); 4.while(!st.IsEmpty()) { 1)tmp=st.pop();
第5章 递归 1.递归的概念
1)定义是递归的 2)数据结构是递归的 3)问题的解法是递归的 2.迷宫问题 3.递归过程的实现 4 .利用栈实现的迷宫问题的非递归解法 5.广义表(General List)
1)广义表的概念(LS)
2)广义表的性质
3)广义表的操作
4) 广义表的存储结构
5)广义表部分成员函数的实现算法
例2.查找非空单链表中值为x的结点,并输出之。 template<class type>void print(listnode<type>*f) { if(f!=null) if(f data==x)cout<<f data<<endL; else print(f link); }
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
当 n = 0时 当 n = 1时 当 n > 1时
6−4
按照上式,求第 项斐波那契数列的递归函数如下 项斐波那契数列的递归函数如下: 按照上式,求第n项斐波那契数列的递归函数如下:
public static long fib(int n){ if(n == 0 || n == 1) return n; else return fib(n - 1) + fib(n - 2); } //递归出口 递归出口 //递归调用 递归调用
例 :汉诺塔问题的递归求解过程
A B C A B C
1 2 3 4 (a) 4 (b) 1 2 3
A
B
C
A
B
C
1 1 2 3 (c) 4 (d) 2 3 4
6.4 递归过程和运行时栈
递归函数的执行过程具有三个特点: 递归函数的执行过程具有三个特点: (1)函数名相同; )函数名相同; (2)不断地自调用; )不断地自调用; (3)最后被调用的函数要最先被返回。 )最后被调用的函数要最先被返回。 系统用于保存递归函数调用信息的堆栈称作运行时栈。 系统用于保存递归函数调用信息的堆栈称作运行时栈。 运行时栈 每一层递归调用所需保存的信息构成运行时栈的一个工作 每一层递归调用所需保存的信息构成运行时栈的一个工作 记录 栈顶的工作记录保存的是当前调用函数的信息, 栈顶的工作记录保存的是当前调用函数的信息,所以栈顶 的工作记录也称为活动记录 活动记录。 的工作记录也称为活动记录。
递归调用执行过程: 递归调用执行过程:
例2:折半查找递归算法 ห้องสมุดไป่ตู้半查找递归算法
public static int bSearch(int[] a, int x, int low, int high){ int mid; if(low > high) return -1; mid = (low + high) / 2; if(x == a[mid]) return mid; else if(x < a[mid]) return bSearch(a, x, low, mid - 1); else return bSearch(a, x, mid + 1, high); } //在下半区查找 在下半区查找 //在上半区查找 在上半区查找 //查找成功 查找成功 //查找不成功 查找不成功
第6章 递归算法 章
6.1 递归的概念 6.2 递归算法的执行过 6.3 递归算法的设计方法 6.4 递归过程和运行时栈 6.5 递归算法的效率分析 6.6 递归算法到非递归算法的转换 6.7 设计举例
本章主要知识点: 本章主要知识点: ● 递归的概念 ● 递归算法的设计方法 ● 递归算法的执行过程 ● 递归算法的效率
6.1 递归的概念
若一个算法直接地或间接地调用自己本身, 若一个算法直接地或间接地调用自己本身,则称 这个算法是递归算法。 这个算法是递归算法。 递归算法 1.问题的定义是递归的 问题的定义是递归的 例如: 例如:阶乘函数的定义 1 n= n*(n-1) 当n>0时 时 当n=0时 时
2. 问题的解法存在自调用 例如: 例如:折半查找算法
阶乘递归函数运行时栈的变化过程: 阶乘递归函数运行时栈的变化过程:
6.5 递归算法的效率分析
我们以斐波那契数列递归函数的执行效率为例来讨论 递归算法的执行效率问题。 递归算法的执行效率问题。 斐波那契数列Fib(n)的递推定义是: 斐波那契数列 的递推定义是: 的递推定义是
0 Fib ( n ) = 1 Fib ( n − 1) + Fib ( n − 2 )
例:求解迷宫问题
迷宫问题的搜索过程: 迷宫问题的搜索过程:
路口 1 2 3 4(死 路 ) 3(死 路 ) 2 5(死 路 ) 2 6 动作 向前 向左 向右 回溯 回溯 向前 回溯 向右 向左 结果 进入2 进入3 进入4 进入3 进入2 进入5 进入2 进入6 进入7
fib(5)的递归调用树 的递归调用树
Fib(5)
Fib(4)
Fib(3)
Fib(3)
Fib(2)
Fib(2)
Fib(1)
Fib(2)
Fib(1)
Fib(1)
Fib(0)
Fib(1)
Fib(0)
Fib(1)
Fib(0)
6.6 递归算法到非递归算法的转换
一般来说,如下两种情况的递归算法可转化为非递归算法: 一般来说,如下两种情况的递归算法可转化为非递归算法: (1)存在不借助堆栈的循环结构的非递归算法,如阶乘计算 )存在不借助堆栈的循环结构的非递归算法, 问题、斐波那契数列的计算问题、 问题、斐波那契数列的计算问题、折半查找问题等 (2)存在借助堆栈的循环结构的非递归算法。所有递归算法 )存在借助堆栈的循环结构的非递归算法。 都可以借助堆栈转换成循环结构的非递归算法。 都可以借助堆栈转换成循环结构的非递归算法
设计一个计算3!得主函数如下 用来说明递归算法的 设计一个计算 !得主函数如下,用来说明递归算法的 执行过程: 执行过程:
public static void main(String[] args){ long fn; try{ fn = fact(3); System.out.println("fn = " + fn); } catch(Exception e){ System.out.println(e.getMessage()); } }
6.2 递归算法的执行过程
例1:阶乘的递归算法 :
public static long fact(int n) throws Exception{ int x; long y; if(n < 0){ throw new Exception("参数错!"); 参数错! 参数错 } if(n == 0) return 1; else{ x = n - 1; y = fact(x); return n * y; } }
递归调用执行过程: 递归调用执行过程:
6.3 递归算法的设计方法
适宜于用递归算法求解的问题的充分必要条件是: 适宜于用递归算法求解的问题的充分必要条件是: (1)问题具有某种可借用的类同自身的子问题描述的性质 ) (2)某一有限步的子问题(也称作本原问题)有直接的解 )某一有限步的子问题(也称作本原问题) 存在。 存在。 当一个问题存在上述两个基本要素时, 当一个问题存在上述两个基本要素时,设计该问题的递归 算法的方法是: 算法的方法是: (1)把对原问题的求解表示成对子问题求解的形式。 )把对原问题的求解表示成对子问题求解的形式。 (2)设计递归出口。 )设计递归出口。
if(n > 0) display(n - 1);
//递归 递归
//n<=0为递归出口,递归出口为空语句 为递归出口, 为递归出口 }
例2:设计求解委员会问题 :
A B C D E
C D C E A B A C A D A E
B
C
B
D
B
E
D
E
B C D E
A A A A
B C D E
B
B
C
B
D
B
E
测试主函数设计如下: 测试主函数设计如下:
public static void main(String[] args){ int[] a = {1, 3, 4, 5, 17, 18, 31, 33}; int x = 17; int bn; bn = bSearch(a, x, 0, 7); if(bn == -1) System.out.println("x不在数组 中"); 不在数组a中 不在数组 else System.out.println("x在数组 中,下标为 + bn); 在数组a中 下标为" 在数组 }
6.7 设计举例
6.7.1 一般递归函数设计举例 例1: 设计一个输出如下形式数值的递归函数。 : 设计一个输出如下形式数值的递归函数。 n n n ... n ...... 3 3 3 2 2 1
递归函数设计如下 : public static void display(int n){ for(int i = 1; i <= n; i ++){ System.out.print(" } System.out.println(); " + n);
+
C D E
C
D
C
E
D
E
6.72 回溯法及设计举例 回溯法的基本思想是:对一个包括有很多结点, 回溯法的基本思想是:对一个包括有很多结点,每个 的基本思想是 结点有若干个搜索分支的问题, 结点有若干个搜索分支的问题,把原问题分解为对若 干个子问题求解的算法。当搜索到某个结点、 干个子问题求解的算法。当搜索到某个结点、发现无 法再继续搜索下去时,就让搜索过程回溯(即退回) 法再继续搜索下去时,就让搜索过程回溯(即退回) 到该结点的前一结点,继续搜索这个结点的其他尚未 到该结点的前一结点, 搜索过的分支; 搜索过的分支;如果发现这个结点也无法再继续搜索 下去时,就让搜索过程回溯到这个结点的前一结点继 下去时, 续这样的搜索过程; 续这样的搜索过程;这样的搜索过程一直进行到搜索 到问题的解或搜索完了全部可搜索分支没有解存在为 止。