(数据结构)九讲-递归及其应用.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

第九讲递归;递归的定义;例如:

voidA()

{…

A();

}

函数A中的语句直接调用了函数A本身,这叫做直接递归调用。

;递归的定义;递归的根本思想;递归的要素;例1阶乘函数;求解阶乘n!的过程;;递归函数的内部执行过程;例2.Fibonacci数列求解.;非递归求解:

intf(intn)

{ intpre,now,next,j;

if(n=1)return(n);

else

{ pre=0; now=1;

for(j=2;j=n;j++)

{ next=pre+now;

pre=now;

now=next;

}

return(next);

}

};递归求解:

intf(intn)

{

if(n=1)return(n);

else

return(f(n-1)+f(n-2));

};递归程序与非递归程序的差异;递归与非递归的比较;递归的应用;回文串;可以用递归方法检测一个字符串S是否为回文串。

设S=“ShSh+1….St-1St”,

h是第一个字符的位置,t是最后一个字符的位置。

1)假设S是空串或长度为1,那么S为回文串,否那么:

2)假设Sh≠St,那么S不是回文串,否那么,递归地检测S的子串“Sh+1….St-1”.;回文串;递归的经典问题——汉诺塔问题;汉诺塔问题的递归求解:

如果n=1,那么将这一个盘子直接从塔A移到塔C上。否那么,执行以下三步:

⑴将塔A上的n-1个碟子借助塔C先移到塔B上;

⑵把塔A上剩下的一个碟子移到塔C上;

⑶将n-1个碟子从塔B借助于塔A移到塔C上。;;voidHanoi(intn,charA,charB,charC)

{??

if(n==1)Move(A,C);

????else{??????????????

Hanoi(n-1,A,C,B);

????Move(A,C);

?????????Hanoi(n-1,B,A,C);??????????????

}???????

};Hanio(3,A,B,C);⑴写出函数当前调用层执行的各语句,并用有向弧表示语句的执行次序;

⑵对函数的每个递归调用,写出对应的函数调用,从调用处画一条有向弧指向被调用函数入口,表示调用路线,从被调用函数末尾处画一条有向弧指向调用语句的下面,表示返回路线;

⑶在返回路线上标出本层调用所得的函数值。;

;在迷宫中求从入口到出口的所有路径是一

个经典的程序设计问题。

迷宫可用以下图所示的方块来表示,其中每个

元素或为通道〔以空白方块表示〕,或为

墙〔以带红色的方块表示〕。

??宫问题要求的就是:从入口到出口的一个以

空白方块构成的(无环)路径。;迷宫问题——

将迷宫表示为二维数组;求解迷宫问题的简单方法是:从入口出

发,沿某一方向进行探索,假设能走通,那么

继续向前走;否那么沿原路返回,换一方向

再进行探索,直到所有可能的通路都探索

到为止。这类方法统称回溯法。;求迷宫路径算法的根本思想是:;;回溯法〔试探法〕

——将问题的候选解按某一顺序逐一枚举和检验;

在回溯法中,放弃当前候选解,寻找下一个候选解的过程叫做回溯.;为了方便判断我们行走的下一步是否出界,我们假设迷宫的四周被墙壁包围。如以下图:;

迷宫可用二维数组maze[m][n]来表示,

数组中元素为0的表示通道,为1的表示墙。

迷宫的入口处为maze[1][1],

出口处为maze[m-2][n-2],

它们的元素值必为0。

任意时刻在迷宫中的位置可用元素的行下标和列下标(i,j)来表示。;迷宫问题;在某一点maze[i][j]时,可能的运动方向有四个。可以建立一个数组move[4]给出相对于位置(i,j)的四个方向上,i与j的增量值。

move数组的定义如下:

typedefstruct

{

intvert;

inthoriz;

}offsets;

offsetsmove[4];;Move数组的值:;算法的实现

求迷宫中一条路径的算法,可以从入口开始,对每个“当前位置”都从上方向试起,假设不能通过,那么依次试验下方向、左方向、右方向。

中选定一个可通的方向,即找到“下一个位置”后,要把当前所在的位置纳入到探索路径中,并将当前所在的位置以及所选的方向记

文档评论(0)

寒傲似冰 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8071104010000026

1亿VIP精品文档

相关文档